栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC中@RequestBody和@ResponseBody两个注解的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC中@RequestBody和@ResponseBody两个注解的区别

 程序员小王的博客:程序员小王的博客
 欢迎点赞  收藏 ⭐留言 
 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕
java自学的学习路线:java自学的学习路线

今天我想详细的了解一下Spring MVC中@RequestBody和@ResponseBody的区别,让我自己在开发中更好的使用这两个注解

一、@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,

    
    TYPE_PARAMETER,

    
    TYPE_USE

@Retention:指定注解的生效时期,其中RUNINE指运行时有效

//JDK提供的注解,修饰注解的注解,元注解
@Target({ElementType.PARAMETER})   //作用:勇来指定自定义注解的作用范围
@Retention(RetentionPolicy.RUNTIME)
@documented
public @interface RequestBody {
    boolean required() default true;
}


二、@ResponseBody

@ResponseBody注解告诉控制器,返回的对象需要自动化序列成JSON,并通过HttpResponseBody返回给客户端

  • 控制器通过id查询用户
  
    @ResponseBody
    @GetMapping("{id}")
    public ResponseEntity 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 "";
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/684072.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号