4.注解@RequestMapping
4.注解@RequestMapping
@RequestMapping 是一个用来处理请求地址映射的注解,它可以用于类上,也可以用于方法上。用于类上的注解会将一个特定请求或者请求模式映射到一个控制器之上,表示类中的所有响应请求的方法都是以该地址作为父路径;用在方法上表示进一步指定到处理方法的映射关系。
该注解有6个属性,一般比较常用的有三个属性:value、method 和 produces。
① value :指定请求的实际地址,value 可以省略不写,value也是数组可以定义多个请求地址
② method :指定请求的类型,主要有 GET、PUT、POST、DELETE,默认为 GET
③ produces :指定返回内容类型,如 produces = "application/json;charset=UTF-8",仅当request请求头中的(Accept)类型中包含该指定类型才返回
④ consumes :指定处理请求的提交内容类型(Content-Type),例如application/json,text/html
⑤ params :指定request中必须包含某些参数值时,才让该方法处理
⑥ headers :指定request中必须包含某些指定的header值,才能让该方法处理请求
举个🌰:
@RestController
@RequestMapping(value = "/test", produces = "application/json;charset=UTF-8")
public class TestController {
@RequestMapping(value = "/get", method = RequestMethod.GET)
public String testGet() {
return "success";
}
@RequestMapping(value = "/{summer, winter}", method = RequestMethod.GET)
public String testGet() {
return "success";
}
}
ant风格:
// 可匹配“/get/id1”或“/get/ida”,但不匹配“/get/id”或“/get/idaa”
@RequestMapping(value="/get/id?")
// 可匹配“/get/idabc”或“/get/id”,但不匹配“/get/idabc/abc”
@RequestMapping(value="/get/id*")
// 可匹配“/get/id/abc”,但不匹配“/get/idabc”
@RequestMapping(value="/get/id/*")
// 可匹配“/get/id/abc/abc/123”或“/get/id/123”,也就是Ant风格和URI模板变量风格可混用
@RequestMapping(value="/get/id/**/{id}")
含正则表达式:
// 可以匹配“/get/123-1”,但不能匹配“/get/abc-1”,这样可以设计更加严格的规则
@RequestMapping(value="/get/{idPre:\\d+}-{idNum:\\d+}")
关系匹配:
// 即 /get 或 /fetch都会映射到该方法上
@RequestMapping(value = {"/get", "/fetch"})
// method: 指定请求的method类型, GET、POST、PUT、DELETE等
@RequestMapping(value="/get/{bookid}", method={RequestMethod.GET,RequestMethod.POST})
params属性:
// 请求参数包含“action=del”, 如:http://localhost:8080/book?action=del
@RequestMapping(params = "action=del")
headers属性:
// 表示请求的URL必须为“/header/id 且 请求头中必须有“Accept =application/json”参数即可匹配
@RequestMapping(value="/header/id", headers = "Accept=application/json")
consumes和produces属性:
在Request中
ContentType 用来告诉服务器当前发送的数据是什么格式
Accept 用来告诉服务器,客户端能认识哪些格式,最好返回这些格式中的其中一种consumes 用来限制ContentType
produces 用来限制Accept
举个🌰:
有个用户给我发了一个请求
请求头中
ContentType = application/json
Accept = */*
就是说用户发送的json格式的数据,可以接收任意格式的数据返回
但是我的接口中定义了consumes={"application/xml"},produces={"application/xml"}
我只接收 application/xml 格式,也只返回xml格式
很明显,用户调不通这个接口
所以我改下consumes={"application/xml","application/json"},produces={"application/xml"}
注: 除了格式支持,还需要与数据对应的http转换器(HttpMessageConverter)具体内容见标题8
@RequestMapping的value值前后是否有"/"对请求的路径没有影响,即value="book" 、"/book"、"/book/"其效果是一样的,但是建议加上符合规范。
四种不同的请求方式,都有相应的注解。不用每次在 @RequestMapping 注解中加 method 属性来指定。
@GetMapping:
是一个组合注解,用于将HTTP GET请求映射到特定处理程序方法的注释。是@RequestMapping(method = RequestMethod.GET)的缩写。
@PostMapping:
是一个组合注解,用于将HTTP POST请求映射到特定处理程序方法的注释。是@RequestMapping(method = RequestMethod.POST)的缩写。
相应地,PUT 方式和 DELETE 方式对应的注解分别为 @PutMapping 和 @DeleteMapping
本文来自博客园,作者:Lz_蚂蚱,转载请注明原文链接:https://www.cnblogs.com/leizia/p/15173406.html

浙公网安备 33010602011771号