Spring MVC @RequestMapping

来源:互联网 发布:mac如何自动隐藏菜单栏 编辑:程序博客网 时间:2024/04/29 01:49

@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。它有6个属性:

  • value, method
value:指定请求的实际地址,指定的地址可以用URI Template模式。
method:指定请求的method类型, GET POST PUT DELETE等。
默认RequestMapping("..str..")即为value的值。
@Controller@RequestMapping("/appointments")public class AppointmentsController {    private 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(@Valid AppointmentForm appointment, BindingResult result) {        if (result.hasErrors()) {            return "appointments/new";        }        appointmentBook.addAppointment(appointment);        return "redirect:/appointments";    }}
value可以是普通的值,也可以为含有某变量的值,还可以为含正则表达式的值。 
@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"; }
@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\d\.\d\.\d}.{extension:\.[a-z]}")  public void handle(@PathVariable String version, @PathVariable String extension) {        // ...  }}



  • consumes, produces
consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html
produces:指定返回的内容类型,仅当request请求中(Accept)类型中包含该类型才返回。
@Controller@RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json")public void addPet(@RequestBody Pet pet, Model model) {        // implementation omitted}

@Controller@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, produces="application/json")@ResponseBodypublic Pet getPet(@PathVariable String petId, Model model) {        // implementation omitted}



  • params, headers
params:指定request中必须包含某些参数值时,才让该方法处理。
headers:指定request中必须包含某些指定的header值时,才能让该方法处理请求。
@Controller@RequestMapping("/owners/{ownerId}")public class RelativePathUriTemplateController {  @RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, params="myParam=myValue")  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {        // implementation omitted  }}
仅处理请求中包含名为“myParam”,值为“myValue”的请求。

@Controller@RequestMapping("/owners/{ownerId}")public class RelativePathUriTemplateController {@RequestMapping(value = "/pets", method = RequestMethod.GET, headers="Referer=http://www.ifeng.com/")  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {        // implementation omitted  }}

仅处理request的header中包含了指定Refer请求头和对应值为“http://www.ifeng.com”的请求。


0 0