前言
自己当笔记使用,有错误或补充请指正
简单注解
1、@RestController注解
相当于@Controller+@ResponseBody两个注解的结合,代表返回的是json格式的数据,这个注解是Spring4之后新加的注解,原来返回json格式的数据需要@ResponseBody配合@Controller一起使用;
2、@responseBody注解
作用
- 将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,进而将数据返回给客户端,通常用来返回JSON数据或者是XML数据,
- 当方法上面没有写ResponseBody,底层会将方法的返回值封装为ModelAndView对象。 如果返回值是字符串,那么直接将字符串写到客户端;如果是一个对象,会将对象转化为json串,然后写到客户端。
- 在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
返回值转换为json格式
- 通过HttpMessageConverter中的方法实现的,它本是一个接口,在其实现类完成转换。如果是bean对象,会调用对象的getXXX()方法获取属性值并且以键值对的形式进行封装,进而转化为json串。如果是map集合,采用get(key)方式获取value值,然后进行封装。
3、@RequestMapping
@RequestMapping注解是一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上。
@RequestMapping 的 value 属性必须设值;
注解中我们可以手动修改编码格式,例如@RequestMapping(value=“/cat/query”,produces=“text/html;charset=utf-8”),前面是请求的路径,后面是编码格式。
- @RequestMapping 的value属性是通过当前请求的请求地址来匹配请求;从下方源码可以看到value属性是一个字符串类型的数组,因此说明可以将多个请求映射到一个方法上,只需要给value 来指定一个包含多个路径的数组。
- @RequestMapping的method属性是通过当前请求的请求方式来匹配请求;浏览器向服务器发送请求,请求方式有很多GET、HEAD、POST、PUT、PATCH、DELETE、OPTIONS、TRACE。可以使用method属性来约束请求方式。
- @RequestMapping的params属性是通过当前请求的请求参数来匹配请求;params属性是一个字符串类型的数组,可以通过下面四种表达是来设置匹配关系
- “param”:要求请求映射的请求必须为包含 param的请求参数
- “!param”:要求请求映射的请求是不能包含param的请求参数
- “param=value”:要求请求映射的请求必须包含 param 的请求参数,且 param 参数的值必须为 value
- “param!=value”: 要求请求映射的请求是必须包含 param 的请求参数,其值不能为 value。
- @RequestMapping的headers属性是通过当前请求的请求头信息来匹配请求;headers属性是一个字符串类型的数组,可以通过下面四种表达是来设置匹配关系
- “header”:要求请求映射的请求必须为包含 header的请求头信息
- “!header”:要求请求映射的请求必须为不包含header的请求头信息
- “header=value”:要求请求映射的请求必须为包含header的请求头信息,并且header的值必须为value
- “header!=value”:要求请求映射的请求必须为包含header的请求头信息,并且header的值必须不是value
- @RequestMapping的consumes属性:指定处理请求的提交内容类型(Content-Type),例如application/json,text/html;
- @RequestMapping的produces属性: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
String name() default "";
@AliasFor("path")
String[] value() default {};
@AliasFor("value")
String[] path() default {};
RequestMethod[] method() default {};
String[] params() default {};
String[] headers() default {};
String[] consumes() default {};
String[] produces() default {};
}