1. 代码示例
@RestController
@RequestMapping("agent")
public class AgentController {
@Resource
private AgentService agentService;
@RequestMapping("/deleteAgent")
@ResponseBody
public Object deleteAgent(Integer agentId) {
...
}
2. @RestController
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。
1) 如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html;配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
2) 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
3) 如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
3. @RequestMapping
3.1 含义
(1)用来处理请求地址映射的注解,指示Spring用哪一个类或方法处理请求动作,可用于类或方法上。
(2)用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
3.2 属性
- value:请求地址,
value="/king/getKingId"
- method:请求方法,
method = RequestMethod.GET
- params:请求参数,
params="myParam=myValue"
- header:请求头,
headers="myHeader=myValue"
- consumes: 可消费的媒体类型,只有当请求头中 Content-Type 的 值与它指定的相同的时候,请求才会被匹配,
consumes="application/json"
- produces:可生产的媒体类型,只有当请求头中 Accept 的值与指定它中有相同的时候,请求才会被匹配,
produces = MediaType.APPLICATION_JSON_UTF8_VALUE
4. 快捷方式变体@RequestMapping:
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
- @PatchMapping
@GetMapping 是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。
5. @PathVariable
(1)接收请求路径中占位符的值。
(2)扩充:URI模板" /owners/{ownerId} "指定了一个变量,名为 ownerId 。当控制器处理这个请求的时候,ownerId 的值就会被URI模板中对应部分的值所填充。比如说,如果请求的URI 是 /owners/fred ,此时变量 ownerId 的值就是 fred 。
@GetMapping("/owners/{ownerId}")
public Person getPerson(@PathVariable String ownerId) {
// ...
}
6. @MatrixVariable
(1)矩阵变量:路径段落中携带的键值对。
(2)矩阵变量可以在任何路径段落中出现,每对矩阵变量之间使用一个分号“;”隔开。比如这样的 URI: “/cars;color=red;year=2012” 。多个值可以用逗号隔开 “color=red,green,blue” ,
(3)如果一个URL有可能需要包含矩阵变量,那么在请求路径的映射配置上就需要使用URI模板来 体现这一点。这样才能确保请求可以被正确地映射,而不管矩阵变量在URI中是否出现、出现 的次序是怎样等。
(4)如何从矩阵变量中获取到变量“q”的值:
必须将 enable- matrix-variables 属性设置为 true ,默认为 false。
<mvc:annotation-driven enable-matrix-variables="true"/>
// GET /pets/42;q=11;r=22
@RequestMapping(path = "/pets/{petId}", method = RequestMethod.GET)
public void findPet(@PathVariable String petId, @MatrixVariable int q) {
// petId == 42 // q == 11
}
或用更精确的信息来指定一 个矩阵变量的位置:
// GET /owners/42;q=11/pets/21;q=22
@RequestMapping(path = "/owners/{ownerId}/pets/{petId}", method = RequestMethod.GET)
public void findPet( @MatrixVariable(name="q", pathVar="ownerId") int q1, @MatrixVariable(name="q", pathVar="petId") int q2) {
// q1 == 11 // q2 == 22
}
7. @RequestHeader
将请求标头绑定到控制器中的方法参数。
8. @RequestParam
将Servlet请求参数(即查询参数或表单数据)绑定到控制器中的方法参数。
用于controller层,解决前台参数名称与后台接收参数变量名称不一致的问题。
@GetMapping("/getA")
public String setupForm(@RequestParam("petId") int petId) {
...
{
9. @Order
定义Spring IOC容器中Bean的执行顺序的优先级,而不是定义Bean的加载顺序,Bean的加载顺序不受@Order或Ordered接口的影响;
@Order(Ordered.LOWEST_PRECEDENCE)
10. @WebFilter
过滤器配置注解,可省去web.xml里的配置
@WebFilter(filterName = "accessLogFilter", urlPatterns = "/*")
public class ... {
...
}
11. @CookieValue
将HTTP cookie的值绑定到控制器中的方法参数。
cookie的请求:
JSESSIONID = 415A4AC178C59DACE0B2C9CA727CDD84
如何获取cookie值:
@GetMapping("/demo")
public void handle(@CookieValue("JSESSIONID") String cookie) {
//...
}
12. @ModelAttribute
(1)可被应用在方法或方法参数上;
(2)注解在方法上的 @ModelAttribute 说明了方法的作用是用于添加一个或多个属性到model上;
(3)注解在方法参数上的 @ModelAttribute 说明了该方法参数的值将由model中取得。如果model 中找不到,那么该参数会先被实例化,然后被添加到model中。
13. @SessionAttributes
(1)用于在请求之间的HTTP Servlet会话中存储模型属性。
(2)它是一个类型级别的注释,用于声明特定控制器使用的会话属性。通常列出模型属性的名称或模型属性的类型,这些属性应该透明地存储在会话中以供后续访问请求使用。
14. @EnableWebMvc
启用MVC配置,与下述xml配置作用一样,二选一
<!-- java中使用注解方式 -->
@EnableWebMvc
public class WebConfig {
}
<!-- xml配置 -->
<mvc:annotation-driven/>