@RequestMapping,@RequsetBody等注解说明

时间:2020-03-28 23:20:10   收藏:0   阅读:95

@RequestMapping,@RequestBody的注解的使用

当下的主流web开发框架当属springMVC,究其原因就是SpringMVC可以很容易的将后台的数据转化为各种类型的数据,,很好的适应了移动互联网的数据多样化变化的要求。比如可以很容易的将数据转化
为我们常使用的json数据集,也可以转化为Excel,PDF,XML等的数据集。随着springboot的发展,注解开发因为其开发速度快,编译期间容易发现错误的出处,注解开发已经成为趋势。这篇博文就基于srpingboot下的
springmvc注解进行梳理,以下的所有代码测试都是以springboot为基础构建的。
技术分享图片

springMVC的工作流程图

在了解具体的注解使用之前,了解一下springMVC的工作流程和工作的时序图是很有必要的。

技术分享图片

说明:由于现在大部分项目都是前后端分离,大部分情况下,后端只需要传递指定的Json数据集即可,所以这里的springmvc的流程图中的视图是基于json视图的。

springMvc的时序图如下:

技术分享图片

srpingmvc处理一个web请求的时序图

@RequestMapping注解的使用

比较常用的属性还是value和path这两个属性,这两个属性来配置路径的,当然也可以使用method属性来配置HTTP的请求类型。

  1. 编写测试的类

     //控制器
     @Controller
     @RequestMapping("/my")
     public class UserController {
    
       /**
       * 获取用户
       * @return 以json格式返回数据
        */
     @RequestMapping("/getuser")
     @ResponseBody
     public User getUser(){
       User user = new User();
       user.setId(1);
       user.setName("chenw1024");
       return user;
      }
    

    }

2.测试

   浏览器 输入 http://localhost:8080/my/getuser

技术分享图片

可以看到浏览器展示出了用户的信息。这是因为这里还使用了一个注解 @ReponseBody这个注解。主要返回服务端的响应结果。

@ReponseBody注解

看看@ResponseBody这个注解的源码

     @Target({ElementType.TYPE, ElementType.METHOD})
     @Retention(RetentionPolicy.RUNTIME)
     @Documented
    public @interface ResponseBody {

    }

从源码可以了解到这个注解并没有属性,但是使用它还是很经常的。一般应用在方法上。

@RequestParm注解

常用的属性就是 value属性和required 这来两个属性。

user_id,user_name ,note 这是前端的参数 通过@RequestParm 就映射到相应的方法上的参数。

测试结果:

技术分享图片

测试成功

有时候,可能我们并不需要传递全部的参数,在这里如果我们只传递两个参数,会怎么样,

    浏览器输入: http://localhost:8080/my/annotation?user_id=3&user_name=chen

测试结果:

技术分享图片

报400的错误,说明是客户端传递的参数个数和服务端参数个数的不相等。解决这个问题,只要将对应属性required的值设置为false ,这里由于我们不传递note的值,所以将@RequestParam(value = "note")String note改为 @RequestParam(value = "note",required = false)String note
再测试一遍:

  浏览器输入: 浏览器输入: http://localhost:8080/my/annotation?user_id=3&user_name=chen

测试结果:

技术分享图片

测试成功

如果一个实体的字段很多,这样传递参数就很不方便。这时候就要提到另一个注解了,那就是@RequsetBody这个注解。

@RequestBody注解

注意两点:

  1. 就是前端传递的对象属性必须和后端对应。比如 后端定义的user属性为 int id ,String name ,前端也必须使用相同的类型和字段来定义。
  2. 要使用Json数据集进行传递,也就是设置为 contentType: "application/json"

使用postman进行测试:

设置json数据:
技术分享图片

测试结果
技术分享图片

@PathVariable注解

测试如下:

     浏览器输入: localhost:8080/my/get/1/chen

测试结果:

技术分享图片

测试成功

参考资料:

  1. 《深入浅出springboot》 杨开振
  2. springboot的官方文档

在正确的道路上,全力以赴,梦想终究照进现实。来自一个菜鸟程序员的鸡汤。

原文:https://www.cnblogs.com/chentang/p/12589844.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!