一、@RequestBody
1、作用
在SpringMvc中。@RequestBody注解会自动的把一个JSON的字符串转换为一个java对象
前端的json字符串
{ "id":15, "name":"刘建平", "salary":32000, "age":23 }
-= 将前端的json转换为java对象
如果HttpRequestBody携带了正确的JSON,SpringMVC会自动将这个JSON反序列化为一个java对象。通常情况下,我们必须使用@RequestBody标注的java类与客户端发送的JSON相对应
注意:java类中的属性名与JSON中的键名必须完全一样,不一样的键值是不会被反序列化到java对象中的
public class TEmp implements Serializable { private static final long serialVersionUID = 429425014454194277L; private Integer id; private String name; private String salary; private Integer age;
2、作用范围
查看源码可知:作用范围只能在方法的参数列表上
@Target({ElementType.*}):作用:用来指定自定义注解的作用范围
Target中的ElementType
//类上 TYPE, /**成员变量上 */ FIELD, /**方法上*/ METHOD, /**参数上*/ PARAMETER, /** 构造方法上*/ CONSTRUCTOR, /** 本地变量上 */ LOCAL_VARIABLE, /** 注解类型上 */ ANNOTATION_TYPE, /** 包上 */ PACKAGE, /** * * * @since 1.8 */ TYPE_PARAMETER, /** * * * @since 1.8 */ TYPE_USE
@Retention:指定注解的生效时期,其中RUNINE指运行时有效
//JDK提供的注解,修饰注解的注解,元注解 @Target({ElementType.PARAMETER}) //作用:勇来指定自定义注解的作用范围 @Retention(RetentionPolicy.RUNTIME) @Documented public @interface RequestBody { boolean required() default true; }
二、@ResponseBody
@ResponseBody注解告诉控制器,返回的对象需要自动化序列成JSON,并通过HttpResponseBody返回给客户端
控制器通过id查询用户
/** * 通过主键查询单条数据 * * @param id 主键 * @return 单条数据 */ @ResponseBody @GetMapping("{id}") public ResponseEntity<TEmp> queryById(@PathVariable("id") Integer id) { return ResponseEntity.ok(this.tEmpService.queryById(id)); }
在浏览器的开发者控制台或者使用像Postman这样的工具,我们可以看到以下的响应:
{ "id": 8, "name": "王恒杰", "salary": "12000.0", "age": 21 }
请记住,如果控制器使用了@RestController注解,就不需要再使用 @ResponseBody了,因为它已经默认添加的。
查看@RestController的源码@RestController=@Controller+@ResponseBody并且@RestController的作用范围是在类上
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Controller @ResponseBody public @interface RestController { @AliasFor( annotation = Controller.class ) String value() default ""; }