|
|
|
@ -556,12 +556,12 @@ application that uses this annotation: |
|
|
|
|
return appointmentBook.getAppointmentsForToday(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
**@RequestMapping(value="/{day}", method = RequestMethod.GET)** |
|
|
|
|
**@RequestMapping(path = "/{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)** |
|
|
|
|
**@RequestMapping(path = "/new", method = RequestMethod.GET)** |
|
|
|
|
public AppointmentForm getNewForm() { |
|
|
|
|
return new AppointmentForm(); |
|
|
|
|
} |
|
|
|
@ -695,7 +695,7 @@ to the value of a URI template variable: |
|
|
|
|
[source,java,indent=0] |
|
|
|
|
[subs="verbatim,quotes"] |
|
|
|
|
---- |
|
|
|
|
@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET) |
|
|
|
|
@RequestMapping(path="/owners/{ownerId}", method=RequestMethod.GET) |
|
|
|
|
public String findOwner(**@PathVariable** String ownerId, Model model) { |
|
|
|
|
Owner owner = ownerService.findOwner(ownerId); |
|
|
|
|
model.addAttribute("owner", owner); |
|
|
|
@ -717,7 +717,7 @@ template variable by name. You can specify it in the annotation: |
|
|
|
|
[source,java,indent=0] |
|
|
|
|
[subs="verbatim,quotes"] |
|
|
|
|
---- |
|
|
|
|
@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET) |
|
|
|
|
@RequestMapping(path="/owners/{ownerId}", method=RequestMethod.GET) |
|
|
|
|
public String findOwner(**@PathVariable("ownerId")** String theOwner, Model model) { |
|
|
|
|
// implementation omitted |
|
|
|
|
} |
|
|
|
@ -730,7 +730,7 @@ will match the method argument name to the URI template variable name: |
|
|
|
|
[source,java,indent=0] |
|
|
|
|
[subs="verbatim,quotes"] |
|
|
|
|
---- |
|
|
|
|
@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET) |
|
|
|
|
@RequestMapping(path="/owners/{ownerId}", method=RequestMethod.GET) |
|
|
|
|
public String findOwner(**@PathVariable** String ownerId, Model model) { |
|
|
|
|
// implementation omitted |
|
|
|
|
} |
|
|
|
@ -742,7 +742,7 @@ A method can have any number of `@PathVariable` annotations: |
|
|
|
|
[source,java,indent=0] |
|
|
|
|
[subs="verbatim,quotes"] |
|
|
|
|
---- |
|
|
|
|
@RequestMapping(value="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET) |
|
|
|
|
@RequestMapping(path="/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); |
|
|
|
@ -886,7 +886,7 @@ Below is an example of extracting the matrix variable "q": |
|
|
|
|
---- |
|
|
|
|
// GET /pets/42;q=11;r=22 |
|
|
|
|
|
|
|
|
|
@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET) |
|
|
|
|
@RequestMapping(path = "/pets/{petId}", method = RequestMethod.GET) |
|
|
|
|
public void findPet(@PathVariable String petId, @MatrixVariable int q) { |
|
|
|
|
|
|
|
|
|
// petId == 42 |
|
|
|
@ -903,10 +903,10 @@ specific to identify where the variable is expected to be: |
|
|
|
|
---- |
|
|
|
|
// GET /owners/42;q=11/pets/21;q=22 |
|
|
|
|
|
|
|
|
|
@RequestMapping(value = "/owners/{ownerId}/pets/{petId}", method = RequestMethod.GET) |
|
|
|
|
@RequestMapping(path = "/owners/{ownerId}/pets/{petId}", method = RequestMethod.GET) |
|
|
|
|
public void findPet( |
|
|
|
|
@MatrixVariable(value="q", pathVar="ownerId") int q1, |
|
|
|
|
@MatrixVariable(value="q", pathVar="petId") int q2) { |
|
|
|
|
@MatrixVariable(name="q", pathVar="ownerId") int q1, |
|
|
|
|
@MatrixVariable(name="q", pathVar="petId") int q2) { |
|
|
|
|
|
|
|
|
|
// q1 == 11 |
|
|
|
|
// q2 == 22 |
|
|
|
@ -921,7 +921,7 @@ A matrix variable may be defined as optional and a default value specified: |
|
|
|
|
---- |
|
|
|
|
// GET /pets/42 |
|
|
|
|
|
|
|
|
|
@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET) |
|
|
|
|
@RequestMapping(path = "/pets/{petId}", method = RequestMethod.GET) |
|
|
|
|
public void findPet(@MatrixVariable(required=false, defaultValue="1") int q) { |
|
|
|
|
|
|
|
|
|
// q == 1 |
|
|
|
@ -936,7 +936,7 @@ All matrix variables may be obtained in a Map: |
|
|
|
|
---- |
|
|
|
|
// GET /owners/42;q=11;r=12/pets/21;q=22;s=23 |
|
|
|
|
|
|
|
|
|
@RequestMapping(value = "/owners/{ownerId}/pets/{petId}", method = RequestMethod.GET) |
|
|
|
|
@RequestMapping(path = "/owners/{ownerId}/pets/{petId}", method = RequestMethod.GET) |
|
|
|
|
public void findPet( |
|
|
|
|
@MatrixVariable Map<String, String> matrixVars, |
|
|
|
|
@MatrixVariable(pathVar="petId"") Map<String, String> petMatrixVars) { |
|
|
|
@ -994,7 +994,7 @@ media type. For example: |
|
|
|
|
[subs="verbatim,quotes"] |
|
|
|
|
---- |
|
|
|
|
@Controller |
|
|
|
|
@RequestMapping(value = "/pets", method = RequestMethod.POST, **consumes="application/json"**) |
|
|
|
|
@RequestMapping(path = "/pets", method = RequestMethod.POST, **consumes="application/json"**) |
|
|
|
|
public void addPet(@RequestBody Pet pet, Model model) { |
|
|
|
|
// implementation omitted |
|
|
|
|
} |
|
|
|
@ -1024,7 +1024,7 @@ condition. For example: |
|
|
|
|
[subs="verbatim,quotes"] |
|
|
|
|
---- |
|
|
|
|
@Controller |
|
|
|
|
@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, **produces="application/json"**) |
|
|
|
|
@RequestMapping(path = "/pets/{petId}", method = RequestMethod.GET, **produces="application/json"**) |
|
|
|
|
@ResponseBody |
|
|
|
|
public Pet getPet(@PathVariable String petId, Model model) { |
|
|
|
|
// implementation omitted |
|
|
|
@ -1057,7 +1057,7 @@ example with a request parameter value condition: |
|
|
|
|
@RequestMapping("/owners/{ownerId}") |
|
|
|
|
public class RelativePathUriTemplateController { |
|
|
|
|
|
|
|
|
|
@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, **params="myParam=myValue"**) |
|
|
|
|
@RequestMapping(path = "/pets/{petId}", method = RequestMethod.GET, **params="myParam=myValue"**) |
|
|
|
|
public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) { |
|
|
|
|
// implementation omitted |
|
|
|
|
} |
|
|
|
@ -1075,7 +1075,7 @@ specific request header value: |
|
|
|
|
@RequestMapping("/owners/{ownerId}") |
|
|
|
|
public class RelativePathUriTemplateController { |
|
|
|
|
|
|
|
|
|
@RequestMapping(value = "/pets", method = RequestMethod.GET, **headers="myHeader=myValue"**) |
|
|
|
|
@RequestMapping(path = "/pets", method = RequestMethod.GET, **headers="myHeader=myValue"**) |
|
|
|
|
public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) { |
|
|
|
|
// implementation omitted |
|
|
|
|
} |
|
|
|
@ -1302,7 +1302,7 @@ The following code snippet shows the usage: |
|
|
|
|
|
|
|
|
|
Parameters using this annotation are required by default, but you can specify that a |
|
|
|
|
parameter is optional by setting ++@RequestParam++'s `required` attribute to `false` |
|
|
|
|
(e.g., `@RequestParam(value="id", required=false)`). |
|
|
|
|
(e.g., `@RequestParam(path="id", required=false)`). |
|
|
|
|
|
|
|
|
|
Type conversion is applied automatically if the target method parameter type is not |
|
|
|
|
`String`. See <<mvc-ann-typeconversion>>. |
|
|
|
@ -1320,7 +1320,7 @@ be bound to the value of the HTTP request body. For example: |
|
|
|
|
[source,java,indent=0] |
|
|
|
|
[subs="verbatim,quotes"] |
|
|
|
|
---- |
|
|
|
|
@RequestMapping(value = "/something", method = RequestMethod.PUT) |
|
|
|
|
@RequestMapping(path = "/something", method = RequestMethod.PUT) |
|
|
|
|
public void handle(@RequestBody String body, Writer writer) throws IOException { |
|
|
|
|
writer.write(body); |
|
|
|
|
} |
|
|
|
@ -1399,7 +1399,7 @@ response body (and not placed in a Model, or interpreted as a view name). For ex |
|
|
|
|
[source,java,indent=0] |
|
|
|
|
[subs="verbatim,quotes"] |
|
|
|
|
---- |
|
|
|
|
@RequestMapping(value = "/something", method = RequestMethod.PUT) |
|
|
|
|
@RequestMapping(path = "/something", method = RequestMethod.PUT) |
|
|
|
|
@ResponseBody |
|
|
|
|
public String helloWorld() { |
|
|
|
|
return "Hello World"; |
|
|
|
@ -1546,7 +1546,7 @@ form field individually. |
|
|
|
|
[source,java,indent=0] |
|
|
|
|
[subs="verbatim,quotes"] |
|
|
|
|
---- |
|
|
|
|
@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST) |
|
|
|
|
@RequestMapping(path = "/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST) |
|
|
|
|
public String processSubmit(**@ModelAttribute Pet pet**) { } |
|
|
|
|
---- |
|
|
|
|
|
|
|
|
@ -1568,7 +1568,7 @@ using an URI template variable and a type converter. Here is an example: |
|
|
|
|
[source,java,indent=0] |
|
|
|
|
[subs="verbatim,quotes"] |
|
|
|
|
---- |
|
|
|
|
@RequestMapping(value="/accounts/{account}", method = RequestMethod.PUT) |
|
|
|
|
@RequestMapping(path = "/accounts/{account}", method = RequestMethod.PUT) |
|
|
|
|
public String save(@ModelAttribute("account") Account account) { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
@ -1593,7 +1593,7 @@ following the `@ModelAttribute` argument: |
|
|
|
|
[source,java,indent=0] |
|
|
|
|
[subs="verbatim,quotes"] |
|
|
|
|
---- |
|
|
|
|
@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST) |
|
|
|
|
@RequestMapping(path = "/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST) |
|
|
|
|
public String processSubmit(**@ModelAttribute("pet") Pet pet**, BindingResult result) { |
|
|
|
|
|
|
|
|
|
if (result.hasErrors()) { |
|
|
|
@ -1617,7 +1617,7 @@ subsequently reported back to the user: |
|
|
|
|
[source,java,indent=0] |
|
|
|
|
[subs="verbatim,quotes"] |
|
|
|
|
---- |
|
|
|
|
@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST) |
|
|
|
|
@RequestMapping(path = "/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST) |
|
|
|
|
public String processSubmit(**@ModelAttribute("pet") Pet pet**, BindingResult result) { |
|
|
|
|
|
|
|
|
|
new PetValidator().validate(pet, result); |
|
|
|
@ -1636,7 +1636,7 @@ annotation: |
|
|
|
|
[source,java,indent=0] |
|
|
|
|
[subs="verbatim,quotes"] |
|
|
|
|
---- |
|
|
|
|
@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST) |
|
|
|
|
@RequestMapping(path = "/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST) |
|
|
|
|
public String processSubmit(**@Valid @ModelAttribute("pet") Pet pet**, BindingResult result) { |
|
|
|
|
|
|
|
|
|
if (result.hasErrors()) { |
|
|
|
@ -1956,7 +1956,7 @@ the view class or interface to be used: |
|
|
|
|
@RestController |
|
|
|
|
public class UserController { |
|
|
|
|
|
|
|
|
|
@RequestMapping(value = "/user", method = RequestMethod.GET) |
|
|
|
|
@RequestMapping(path = "/user", method = RequestMethod.GET) |
|
|
|
|
@JsonView(User.WithoutPasswordView.class) |
|
|
|
|
public User getUser() { |
|
|
|
|
return new User("eric", "7!jd#h23"); |
|
|
|
@ -2008,7 +2008,7 @@ to the model: |
|
|
|
|
@Controller |
|
|
|
|
public class UserController extends AbstractController { |
|
|
|
|
|
|
|
|
|
@RequestMapping(value = "/user", method = RequestMethod.GET) |
|
|
|
|
@RequestMapping(path = "/user", method = RequestMethod.GET) |
|
|
|
|
public String getUser(Model model) { |
|
|
|
|
model.addAttribute("user", new User("eric", "7!jd#h23")); |
|
|
|
|
model.addAttribute(JsonView.class.getName(), User.WithoutPasswordView.class); |
|
|
|
@ -2758,7 +2758,7 @@ through `Model` nor `RedirectAttributes`. For example: |
|
|
|
|
[source,java,indent=0] |
|
|
|
|
[subs="verbatim,quotes"] |
|
|
|
|
---- |
|
|
|
|
@RequestMapping(value = "/files/{path}", method = RequestMethod.POST) |
|
|
|
|
@RequestMapping(path = "/files/{path}", method = RequestMethod.POST) |
|
|
|
|
public String upload(...) { |
|
|
|
|
// ... |
|
|
|
|
return "redirect:files/{path}"; |
|
|
|
@ -2936,7 +2936,7 @@ application/atom+xml is shown below. |
|
|
|
|
|
|
|
|
|
private List<SampleContent> contentList = new ArrayList<SampleContent>(); |
|
|
|
|
|
|
|
|
|
@RequestMapping(value="/content", method=RequestMethod.GET) |
|
|
|
|
@RequestMapping(path="/content", method=RequestMethod.GET) |
|
|
|
|
public ModelAndView getContent() { |
|
|
|
|
ModelAndView mav = new ModelAndView(); |
|
|
|
|
mav.setViewName("content"); |
|
|
|
@ -3542,7 +3542,7 @@ use `MultipartHttpServletRequest` or `MultipartFile` in the method parameters: |
|
|
|
|
@Controller |
|
|
|
|
public class FileUploadController { |
|
|
|
|
|
|
|
|
|
@RequestMapping(value = "/form", method = RequestMethod.POST) |
|
|
|
|
@RequestMapping(path = "/form", method = RequestMethod.POST) |
|
|
|
|
public String handleFormUpload(@RequestParam("name") String name, |
|
|
|
|
@RequestParam("file") MultipartFile file) { |
|
|
|
|
|
|
|
|
@ -3571,7 +3571,7 @@ the method parameter: |
|
|
|
|
@Controller |
|
|
|
|
public class FileUploadController { |
|
|
|
|
|
|
|
|
|
@RequestMapping(value = "/form", method = RequestMethod.POST) |
|
|
|
|
@RequestMapping(path = "/form", method = RequestMethod.POST) |
|
|
|
|
public String handleFormUpload(@RequestParam("name") String name, |
|
|
|
|
@RequestParam("file") Part file) { |
|
|
|
|
|
|
|
|
@ -3629,7 +3629,7 @@ multipart: |
|
|
|
|
[source,java,indent=0] |
|
|
|
|
[subs="verbatim,quotes"] |
|
|
|
|
---- |
|
|
|
|
@RequestMapping(value="/someUrl", method = RequestMethod.POST) |
|
|
|
|
@RequestMapping(path = "/someUrl", method = RequestMethod.POST) |
|
|
|
|
public String onSubmit(**@RequestPart("meta-data") MetaData metadata, |
|
|
|
|
@RequestPart("file-data") MultipartFile file**) { |
|
|
|
|
|
|
|
|
@ -3840,7 +3840,7 @@ When writing error information, the status code and the error message set on the |
|
|
|
|
@Controller |
|
|
|
|
public class ErrorController { |
|
|
|
|
|
|
|
|
|
@RequestMapping(value="/error", produces="application/json") |
|
|
|
|
@RequestMapping(path="/error", produces="application/json") |
|
|
|
|
@ResponseBody |
|
|
|
|
public Map<String, Object> handle(HttpServletRequest request) { |
|
|
|
|
|
|
|
|
|