Address mapping (turn) Introduction to @RequestMapping usage Details:
In the previous period of time the project used a restful mode to develop the program, but when using post, put mode to submit data, the server side can not accept the submitted data (server-side parameter binding without any annotations), to see the submission method is Application/json, And the server side of the data through Request.getreader () does exist in the browser submitted data. In order to find out the reason, the parameter binding (@RequestParam, @RequestBody, @RequestHeader, @PathVariable) was studied, and also looked at the relevant contents of Httpmessageconverter, summarized here.
Brief introduction:
@RequestMapping
Requestmapping is an annotation that handles request address mappings and can be used on classes or methods. On a class, the method that represents all response requests in a class is the parent path of the address.
The requestmapping annotation has six properties, and we'll describe her in three categories below.
1, value, method;
Value: Specifies the actual address of the request, the specified address can be the URI Template mode (which will be explained later);
Method: Specifies the type of method requested, GET, POST, PUT, delete, and so on;
2, Consumes,produces;
Consumes: Specifies the type of submission to process the request (Content-type), such as Application/json, text/html;
Produces: Specifies the type of content returned, only if the specified type is included in the (Accept) type in the request header;
3, Params,headers;
Params: Specifies that some parameter values must be included in the request before the method is processed.
Headers: Specifies that certain header values must be included in the request in order for the method to process requests.
Example: 1, value/method example
Default Requestmapping ("...") That is value:
@Controller @requestmapping ("/appointments") public class Appointmentscontroller {private AppointmentBook AppointmentBook; @Autowired public Appointmentscontroller (AppointmentBook appointmentbook) {This.appointmentbook = Appointmentbo Ok } @RequestMapping (method = requestmethod.get) public map<string, appointment> GET () {return appointmen Tbook.getappointmentsfortoday (); } @RequestMapping (value= "/{day}", method = requestmethod.get) public map<string, appointment> Getforday (@PathV Ariable @DateTimeFormat (Iso=iso. 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 (@Valid appointmentform appointment, Bindingresult R Esult) {if (Result.haserrors ()) {return "AppointmEnts/new "; } appointmentbook.addappointment (appointment); return "Redirect:/appointments"; }}
The URI value of value is the following three categories:
A) can be specified as a normal specific value;
B) can be specified as a class of values containing a variable (URI Template Patterns with Path Variables);
C) can be specified as a class of values with regular expressions (URI Template Patterns with Regular Expressions);
2 consumes, produces example
Examples of Cousumes:
@Controller @requestmapping (value = "/pets", method = Requestmethod.post, consumes= "Application/json") public void Addpet (@RequestBody Pet Pet, model model) { //implementation omitted}
The Content-type method only processes requests with the request "Application/json" type.
Examples of produces:
@Controller @requestmapping (value = "/pets/{petid}", method = Requestmethod.get, produces= "Application/json") @ Responsebodypublic Pet Getpet (@PathVariable String Petid, model model) { //implementation omitted}
The Application/json method only handles requests in the request that accept headers contain "a", and implies that the returned content type is Application/json;
3 Params, headers example
Examples of params:
@Controller @requestmapping ("/owners/{ownerid}") Public class Relativepathuritemplatecontroller { = "/pets/{petid}", method = Requestmethod.get, params= "myparam= MyValue ") publicvoid findpet (@PathVariable string ownerid, @PathVariable string Petid, model model) { // implementation omitted }}
A request with a value of "myvalue" named "Myparam" is included in the processing request only;
Examples of headers:
@Controller @requestmapping ("/owners/{ownerid}") Public class = "/pets", method = Requestmethod.get, headers= "referer=http://www.ifeng.com/") public void findpet (@PathVariable string ownerid, @PathVariable string petid, model model) { Implementation omitted }}
The header that handles request only contains requests that specify the "Refer" request header and the corresponding value " http://www.ifeng.com/
".
ExtJS @requestmapping Address mapping