SlideShare a Scribd company logo
Spring MVC Annotations
Contents

●   Introduction
●   DispatcherServlet
●   Controller
●   RequestMapping
●   RequestParam
●   RequestBody
●   ResponseBody
Spring MVC Controller Annotations



●   Introduced in Spring 2.5
●   Available for both Servlet MVC and Portlet MVC
●   No need to extend specific base classes or implement specific
    interfaces
●   No direct dependencies on Servlet or Portlet APIs
Dispatcher Servlet
Configuring DispatcherServlet

web.xml
<web-app>
    <servlet>
        <servlet-name>example</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>example</servlet-name>
        <url-pattern>/example/*</url-pattern>
    </servlet-mapping>
</web-app>



/WEB-INF/example-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="ee.ignite.example.web"/>

    <!-- ... -->
</beans>
@Controler


    package ee.ignite.example.web;

    import org.springframework.stereotype.Controller;

    @Controller
    public class HelloWorldController {

    }




●       Flexible controller name
●       No need to extend specific base classes or implement specific
        interfaces
@RequestMapping
@Controller
@RequestMapping("/appointments")
public class AppointmentsController {

    private final AppointmentBook appointmentBook;

    @Autowired
    public AppointmentsController(AppointmentBook appointmentBook) {
        this.appointmentBook = appointmentBook;
    }

    @RequestMapping(method = RequestMethod.GET)
    public Map<String, Appointment> get() {
        return appointmentBook.getAppointmentsForToday();
    }

    @RequestMapping(value="/{day}", method = RequestMethod.GET)
    public Map<String, Appointment> getForDay(@PathVariable @DateTimeFormat(iso=ISO.DATE) Date day, Model model) {
        return appointmentBook.getAppointmentsForDay(day);
    }

    @RequestMapping(value="/new", method = RequestMethod.GET)
    public AppointmentForm getNewForm() {
        return new AppointmentForm();
    }

    @RequestMapping(method = RequestMethod.POST)
    public String add(@Validated AppointmentForm appointment, BindingResult result) {
        if (result.hasErrors()) {
            return "appointments/new";
        }
        appointmentBook.addAppointment(appointment);
        return "redirect:/appointments";
    }
}
@PathVariable
@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model model) {
  Owner owner = ownerService.findOwner(ownerId);
  model.addAttribute("owner", owner);
  return "displayOwner";
}


URI template variable name must match with parameter variable name
@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable("ownerId") String theOwner, Model model) {
  Owner owner = ownerService.findOwner(theOwner);
  model.addAttribute("owner", owner);
  return "displayOwner";
}


Multiple path variables
@RequestMapping(value="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)
public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {
  Owner owner = ownerService.findOwner(ownerId);
  Pet pet = owner.getPet(petId);
  model.addAttribute("pet", pet);
  return "displayPet";
}


Multiple values
@RequestMapping(value={"/new", "/novo", "/nuevo"})
public AppointmentForm getNewForm() {
    return new AppointmentForm();
}
Class level
@Controller
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController {

    @RequestMapping("/pets/{petId}")
    public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {
      // implementation omitted
    }
}
●   @PathVariable argument can be of any simple type such as int, long, Date and so on
●   It is possible to add support for additional data types (WebDataBinder or Formatters)
●   TypeMismatchException is thrown if conversion type fails

Regular Expressions

      {varName:regex}
@RequestMapping("{version:d.d.d}{extension:.[a-z]}")
public void handle(@PathVariable String version, @PathVariable String extension) {
}

Path Patterns
@RequestMapping(value="/*/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable("ownerId") String theOwner, Model model) {
}

@RequestMapping(value="/pets/*.do}", method=RequestMethod.GET)
public String findOwner(@PathVariable("ownerId") String theOwner, Model model) {
}
Consumable Media Types
     ●The request will be matched only if the Content-Type request header matches one
     of the specified media types.
     ●The consumes condition is supported on the class and on the method level.
     Method-level consumable types override the class-level consumable type.
                                                                       type
     ●   Can be negated as in !text/plain
@RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json")
public void addPet(@RequestBody Pet pet, Model model) {
}


Producible Media Types
     ●The request will be matched only if the Accept request header matches one of the
     specified media type.
     ●The consumes condition is supported on the class and on the method level.
     Method-level consumable types override the class-level consumable type.
                                                                       type
     ●   Can be negated as in !text/plain
@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, produces="application/json")
@ResponseBody
public Pet getPet(@PathVariable String petId, Model model) {
}
Request Parameters and Header Values
     ● Presence of a param: paramName
     ● Absence of a param: !paramName

     ● Specific value: paramName=value




@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, params="myParam=myValue")
public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {
}

@RequestMapping(value = "/pets", method = RequestMethod.GET, headers="myHeader=myValue")
public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {
}
Supported method argument types
 ●   Request or response objects (Servlet API)
 ●   Session object (Servlet API)
 ●   org.springframework.web.context.request.WebRequest or
     org.springframework.web.context.request.NativeWebRequest
 ●   java.util.Locale
 ●   java.io.InputStream / java.io.Reader
 ●   java.io.OutputStream / java.io.Writer
 ●   java.security.Principal
 ●   HttpEntity<?>
 ●   java.util.Map / org.springframework.ui.Model / org.springframework.ui.ModelMap
 ●   org.springframework.web.servlet.mvc.support.RedirectAttributes
 ●   org.springframework.validation.Errors / org.springframework.validation.BindingResult
 ●   org.springframework.web.bind.support.SessionStatus
 ●   org.springframework.web.util.UriComponentsBuilder



The Errors or BindingResult parameters have to follow the model object that is being bound
immediately
Supported method return types

 ●   ModelAndView
 ●   Model
 ●   Map
 ●   View
 ●   String
 ●   Void
 ●   HttpEntity<?> or ResponseEntity<?>
@RequestParam



●   Bind request parameters to a method parameter
●   Required by default.
●   @RequestParam(value="id", required=false) specifies parameter as
    optional
@RequestMapping(method = RequestMethod.GET)
    public String setupForm(@RequestParam("petId") int petId, ModelMap model) {
        Pet pet = this.clinic.loadPet(petId);
        model.addAttribute("pet", pet);
        return "petForm";
    }
@RequestBody



●     Indicates that a method parameter should be bound to the value of the
      HTTP request body
●     HttpMessageConverter is used to convert the request body to the
      method argument

Default Converters

 ●   ByteArrayHttpMessageConverter converts byte arrays
 ●   StringHttpMessageConverter converts strings
 ●   FormHttpMessageConverter converts form data to/from a MultiValueMap<String, String>
 ●   SourceHttpMessageConverter converts to/from a javax.xml.transform.Source
@ResponseBody



●   Indicates that the return type should be written straight to the HTTP
    response body
●   Uses HttpMessageConverter to convert the returned object to a
    response body
@RequestMapping(value = "/something", method = RequestMethod.PUT)
@ResponseBody
public String helloWorld() {
  return "Hello World";
}

More Related Content

What's hot (19)

PPT
Java Server Faces (JSF) - advanced
BG Java EE Course
 
PDF
Spring mvc
Guo Albert
 
PDF
Spring MVC 3.0 Framework (sesson_2)
Ravi Kant Soni ([email protected])
 
PDF
What's Coming in Spring 3.0
Matt Raible
 
ODP
springmvc-150923124312-lva1-app6892
Tuna Tore
 
PPT
Struts,Jsp,Servlet
dasguptahirak
 
PDF
Spring 4 Web App
Rossen Stoyanchev
 
PPTX
ASP.NET Routing & MVC
Emad Alashi
 
PPTX
Integration of Backbone.js with Spring 3.1
MichaƂ Orman
 
PPTX
Implicit object.pptx
chakrapani tripathi
 
PPT
Backbone js
Knoldus Inc.
 
PPTX
Implicit objects advance Java
Darshit Metaliya
 
ODP
Annotation-Based Spring Portlet MVC
John Lewis
 
PPT
JSF Component Behaviors
Andy Schwartz
 
ODP
Spray - Build RESTfull services in scala
Sandeep Purohit
 
PPT
Data Access with JDBC
BG Java EE Course
 
PPTX
Introduction to JSP
Geethu Mohan
 
PDF
AngularJS Basic Training
Cornel Stefanache
 
PPTX
Rest with Java EE 6 , Security , Backbone.js
Carol McDonald
 
Java Server Faces (JSF) - advanced
BG Java EE Course
 
Spring mvc
Guo Albert
 
Spring MVC 3.0 Framework (sesson_2)
Ravi Kant Soni ([email protected])
 
What's Coming in Spring 3.0
Matt Raible
 
springmvc-150923124312-lva1-app6892
Tuna Tore
 
Struts,Jsp,Servlet
dasguptahirak
 
Spring 4 Web App
Rossen Stoyanchev
 
ASP.NET Routing & MVC
Emad Alashi
 
Integration of Backbone.js with Spring 3.1
MichaƂ Orman
 
Implicit object.pptx
chakrapani tripathi
 
Backbone js
Knoldus Inc.
 
Implicit objects advance Java
Darshit Metaliya
 
Annotation-Based Spring Portlet MVC
John Lewis
 
JSF Component Behaviors
Andy Schwartz
 
Spray - Build RESTfull services in scala
Sandeep Purohit
 
Data Access with JDBC
BG Java EE Course
 
Introduction to JSP
Geethu Mohan
 
AngularJS Basic Training
Cornel Stefanache
 
Rest with Java EE 6 , Security , Backbone.js
Carol McDonald
 

Viewers also liked (16)

PPTX
Introduction to Spring Framework
Dineesha Suraweera
 
PPTX
Next stop: Spring 4
Oleg Tsal-Tsalko
 
PDF
Spring Framework 4.0 - The Next Generation - Soft-Shake 2013
Sam Brannen
 
PPTX
Spring Web MVC
zeeshanhanif
 
PPTX
Spring Social - Messaging Friends & Influencing People
Gordon Dickens
 
PPTX
Flexible validation with Hibernate Validator 5.x.
IT Weekend
 
PDF
Spring4 whats up doc?
David GĂłmez GarcĂ­a
 
PPTX
Sectors of indian economy
madan kumar
 
PPTX
nationalism movement in Indochina
madan kumar
 
PPTX
Physicalfeaturesofindia
madan kumar
 
PDF
Spring mvc my Faviourite Slide
Daniel Adenew
 
DOCX
02 java spring-hibernate-experience-questions
Dhiraj Champawat
 
PDF
Spring 3 Annotated Development
kensipe
 
PDF
Spring Web Service, Spring JMS, Eclipse & Maven tutorials
Raghavan Mohan
 
PDF
What's new in Spring 3?
Craig Walls
 
PPTX
Spring @Transactional Explained
Smita Prasad
 
Introduction to Spring Framework
Dineesha Suraweera
 
Next stop: Spring 4
Oleg Tsal-Tsalko
 
Spring Framework 4.0 - The Next Generation - Soft-Shake 2013
Sam Brannen
 
Spring Web MVC
zeeshanhanif
 
Spring Social - Messaging Friends & Influencing People
Gordon Dickens
 
Flexible validation with Hibernate Validator 5.x.
IT Weekend
 
Spring4 whats up doc?
David GĂłmez GarcĂ­a
 
Sectors of indian economy
madan kumar
 
nationalism movement in Indochina
madan kumar
 
Physicalfeaturesofindia
madan kumar
 
Spring mvc my Faviourite Slide
Daniel Adenew
 
02 java spring-hibernate-experience-questions
Dhiraj Champawat
 
Spring 3 Annotated Development
kensipe
 
Spring Web Service, Spring JMS, Eclipse & Maven tutorials
Raghavan Mohan
 
What's new in Spring 3?
Craig Walls
 
Spring @Transactional Explained
Smita Prasad
 
Ad

Similar to Spring MVC Annotations (20)

PDF
REST based web applications with Spring 3
Oliver Gierke
 
PPT
Spring-training-in-bangalore
TIB Academy
 
PDF
Introducing spring
Ernesto HernĂĄndez RodrĂ­guez
 
PDF
Spring MVC - Web Forms
Ilio Catallo
 
PDF
Multi Client Development with Spring - Josh Long
jaxconf
 
PDF
Spring tutorial
Sanjoy Kumer Deb
 
PPT
Spring training
TechFerry
 
KEY
Multi Client Development with Spring
Joshua Long
 
KEY
Domain Specific Languages (EclipseCon 2012)
Sven Efftinge
 
PDF
Extending spring
Joshua Long
 
PDF
Spring MVC to iOS and the REST
Roy Clarkson
 
PPT
Spring training
shah_d_p
 
PDF
Spring 3.1 in a Nutshell
Sam Brannen
 
PPTX
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Sam Brannen
 
PDF
Spring Reference
Syed Shahul
 
PPT
Spring Basics
Dhaval Shah
 
PDF
Manual tutorial-spring-java
sagicar
 
PDF
Spring Reference
asas
 
PDF
quickguide-einnovator-7-spring-mvc
jorgesimao71
 
PPTX
Spring MVC 5 & Hibernate 5 Integration
Majurageerthan Arumugathasan
 
REST based web applications with Spring 3
Oliver Gierke
 
Spring-training-in-bangalore
TIB Academy
 
Introducing spring
Ernesto HernĂĄndez RodrĂ­guez
 
Spring MVC - Web Forms
Ilio Catallo
 
Multi Client Development with Spring - Josh Long
jaxconf
 
Spring tutorial
Sanjoy Kumer Deb
 
Spring training
TechFerry
 
Multi Client Development with Spring
Joshua Long
 
Domain Specific Languages (EclipseCon 2012)
Sven Efftinge
 
Extending spring
Joshua Long
 
Spring MVC to iOS and the REST
Roy Clarkson
 
Spring training
shah_d_p
 
Spring 3.1 in a Nutshell
Sam Brannen
 
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Sam Brannen
 
Spring Reference
Syed Shahul
 
Spring Basics
Dhaval Shah
 
Manual tutorial-spring-java
sagicar
 
Spring Reference
asas
 
quickguide-einnovator-7-spring-mvc
jorgesimao71
 
Spring MVC 5 & Hibernate 5 Integration
Majurageerthan Arumugathasan
 
Ad

Recently uploaded (20)

PDF
Dev Dives: Accelerating agentic automation with Autopilot for Everyone
UiPathCommunity
 
PDF
Software Development Company Keene Systems, Inc (1).pdf
Custom Software Development Company | Keene Systems, Inc.
 
PPTX
Wondershare Filmora Crack Free Download 2025
josanj305
 
PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
PPTX
Essential Content-centric Plugins for your Website
Laura Byrne
 
PDF
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
PPTX
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
PPTX
Role_of_Artificial_Intelligence_in_Livestock_Extension_Services.pptx
DrRajdeepMadavi
 
DOCX
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
PDF
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PPTX
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
PDF
Bitkom eIDAS Summit | European Business Wallet: Use Cases, Macroeconomics, an...
Carsten Stoecker
 
PDF
Kit-Works Team Study_20250627_í•œë‹Źë§Œì—ë§Œë“ ì‚Źë‚Žì„œëč„슀킀링(양닀윗).pdf
Wonjun Hwang
 
PDF
NASA A Researcher’s Guide to International Space Station : Fundamental Physics
Dr. PANKAJ DHUSSA
 
PDF
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
PDF
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
PDF
Peak of Data & AI Encore AI-Enhanced Workflows for the Real World
Safe Software
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PDF
Home Cleaning App Development Services.pdf
V3cube
 
DOCX
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
Dev Dives: Accelerating agentic automation with Autopilot for Everyone
UiPathCommunity
 
Software Development Company Keene Systems, Inc (1).pdf
Custom Software Development Company | Keene Systems, Inc.
 
Wondershare Filmora Crack Free Download 2025
josanj305
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
Essential Content-centric Plugins for your Website
Laura Byrne
 
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
Role_of_Artificial_Intelligence_in_Livestock_Extension_Services.pptx
DrRajdeepMadavi
 
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
Bitkom eIDAS Summit | European Business Wallet: Use Cases, Macroeconomics, an...
Carsten Stoecker
 
Kit-Works Team Study_20250627_í•œë‹Źë§Œì—ë§Œë“ ì‚Źë‚Žì„œëč„슀킀링(양닀윗).pdf
Wonjun Hwang
 
NASA A Researcher’s Guide to International Space Station : Fundamental Physics
Dr. PANKAJ DHUSSA
 
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
Peak of Data & AI Encore AI-Enhanced Workflows for the Real World
Safe Software
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
Home Cleaning App Development Services.pdf
V3cube
 
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 

Spring MVC Annotations

  • 2. Contents ● Introduction ● DispatcherServlet ● Controller ● RequestMapping ● RequestParam ● RequestBody ● ResponseBody
  • 3. Spring MVC Controller Annotations ● Introduced in Spring 2.5 ● Available for both Servlet MVC and Portlet MVC ● No need to extend specific base classes or implement specific interfaces ● No direct dependencies on Servlet or Portlet APIs
  • 5. Configuring DispatcherServlet web.xml <web-app> <servlet> <servlet-name>example</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>example</servlet-name> <url-pattern>/example/*</url-pattern> </servlet-mapping> </web-app> /WEB-INF/example-servlet.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="ee.ignite.example.web"/> <!-- ... --> </beans>
  • 6. @Controler package ee.ignite.example.web; import org.springframework.stereotype.Controller; @Controller public class HelloWorldController { } ● Flexible controller name ● No need to extend specific base classes or implement specific interfaces
  • 7. @RequestMapping @Controller @RequestMapping("/appointments") public class AppointmentsController { private final AppointmentBook appointmentBook; @Autowired public AppointmentsController(AppointmentBook appointmentBook) { this.appointmentBook = appointmentBook; } @RequestMapping(method = RequestMethod.GET) public Map<String, Appointment> get() { return appointmentBook.getAppointmentsForToday(); } @RequestMapping(value="/{day}", method = RequestMethod.GET) public Map<String, Appointment> getForDay(@PathVariable @DateTimeFormat(iso=ISO.DATE) Date day, Model model) { return appointmentBook.getAppointmentsForDay(day); } @RequestMapping(value="/new", method = RequestMethod.GET) public AppointmentForm getNewForm() { return new AppointmentForm(); } @RequestMapping(method = RequestMethod.POST) public String add(@Validated AppointmentForm appointment, BindingResult result) { if (result.hasErrors()) { return "appointments/new"; } appointmentBook.addAppointment(appointment); return "redirect:/appointments"; } }
  • 8. @PathVariable @RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET) public String findOwner(@PathVariable String ownerId, Model model) { Owner owner = ownerService.findOwner(ownerId); model.addAttribute("owner", owner); return "displayOwner"; } URI template variable name must match with parameter variable name @RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET) public String findOwner(@PathVariable("ownerId") String theOwner, Model model) { Owner owner = ownerService.findOwner(theOwner); model.addAttribute("owner", owner); return "displayOwner"; } Multiple path variables @RequestMapping(value="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET) public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) { Owner owner = ownerService.findOwner(ownerId); Pet pet = owner.getPet(petId); model.addAttribute("pet", pet); return "displayPet"; } Multiple values @RequestMapping(value={"/new", "/novo", "/nuevo"}) public AppointmentForm getNewForm() { return new AppointmentForm(); }
  • 9. Class level @Controller @RequestMapping("/owners/{ownerId}") public class RelativePathUriTemplateController { @RequestMapping("/pets/{petId}") public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) { // implementation omitted } } ● @PathVariable argument can be of any simple type such as int, long, Date and so on ● It is possible to add support for additional data types (WebDataBinder or Formatters) ● TypeMismatchException is thrown if conversion type fails Regular Expressions {varName:regex} @RequestMapping("{version:d.d.d}{extension:.[a-z]}") public void handle(@PathVariable String version, @PathVariable String extension) { } Path Patterns @RequestMapping(value="/*/{ownerId}", method=RequestMethod.GET) public String findOwner(@PathVariable("ownerId") String theOwner, Model model) { } @RequestMapping(value="/pets/*.do}", method=RequestMethod.GET) public String findOwner(@PathVariable("ownerId") String theOwner, Model model) { }
  • 10. Consumable Media Types ●The request will be matched only if the Content-Type request header matches one of the specified media types. ●The consumes condition is supported on the class and on the method level. Method-level consumable types override the class-level consumable type. type ● Can be negated as in !text/plain @RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json") public void addPet(@RequestBody Pet pet, Model model) { } Producible Media Types ●The request will be matched only if the Accept request header matches one of the specified media type. ●The consumes condition is supported on the class and on the method level. Method-level consumable types override the class-level consumable type. type ● Can be negated as in !text/plain @RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, produces="application/json") @ResponseBody public Pet getPet(@PathVariable String petId, Model model) { }
  • 11. Request Parameters and Header Values ● Presence of a param: paramName ● Absence of a param: !paramName ● Specific value: paramName=value @RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, params="myParam=myValue") public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) { } @RequestMapping(value = "/pets", method = RequestMethod.GET, headers="myHeader=myValue") public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) { }
  • 12. Supported method argument types ● Request or response objects (Servlet API) ● Session object (Servlet API) ● org.springframework.web.context.request.WebRequest or org.springframework.web.context.request.NativeWebRequest ● java.util.Locale ● java.io.InputStream / java.io.Reader ● java.io.OutputStream / java.io.Writer ● java.security.Principal ● HttpEntity<?> ● java.util.Map / org.springframework.ui.Model / org.springframework.ui.ModelMap ● org.springframework.web.servlet.mvc.support.RedirectAttributes ● org.springframework.validation.Errors / org.springframework.validation.BindingResult ● org.springframework.web.bind.support.SessionStatus ● org.springframework.web.util.UriComponentsBuilder The Errors or BindingResult parameters have to follow the model object that is being bound immediately
  • 13. Supported method return types ● ModelAndView ● Model ● Map ● View ● String ● Void ● HttpEntity<?> or ResponseEntity<?>
  • 14. @RequestParam ● Bind request parameters to a method parameter ● Required by default. ● @RequestParam(value="id", required=false) specifies parameter as optional @RequestMapping(method = RequestMethod.GET) public String setupForm(@RequestParam("petId") int petId, ModelMap model) { Pet pet = this.clinic.loadPet(petId); model.addAttribute("pet", pet); return "petForm"; }
  • 15. @RequestBody ● Indicates that a method parameter should be bound to the value of the HTTP request body ● HttpMessageConverter is used to convert the request body to the method argument Default Converters ● ByteArrayHttpMessageConverter converts byte arrays ● StringHttpMessageConverter converts strings ● FormHttpMessageConverter converts form data to/from a MultiValueMap<String, String> ● SourceHttpMessageConverter converts to/from a javax.xml.transform.Source
  • 16. @ResponseBody ● Indicates that the return type should be written straight to the HTTP response body ● Uses HttpMessageConverter to convert the returned object to a response body @RequestMapping(value = "/something", method = RequestMethod.PUT) @ResponseBody public String helloWorld() { return "Hello World"; }