各种注解详解@requestBody、@requestParam、@responseBody、@RequestMapping

每次忘了就去看,看了过几天又忘了。。。。心累,这次自己总结一波吧,摘抄自各大优秀博客,链接都在文末给出。

1、@requestBody

该注解用于读取Request请求的body部分数据,所以请求方式为POST。

@requestBody注解常用来处理httpHeaders的key是content-type类型,对应的value不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。所以用postman测试的时候要看清,不然可能会浪费很多时间。

SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。

若前端传的是form表单(form是一种键值对的形式)格式的数据,此时不要加@requestBody注解,传参是application/x-www-form-urlcoded类型的,是key-value。

 

2、@responseBody

@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据,需要注意的呢,在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据

@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。 

该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。 

举例:

@RequestMapping("/login")
  @ResponseBody
  public User login(User user){
    return user;
  }
  User字段:userName pwd
  那么在前台接收到的数据为:'{"userName":"xxx","pwd":"xxx"}'


  效果等同于如下代码
  @RequestMapping("/login")
  public void login(User user, HttpServletResponse response){
    response.getWriter.write(JSONObject.fromObject(user).toString());
  }

 

3、@requestParam

@RequestParam(name="userName", required = false,defaultValue = "xx") String[] userNames
  • value:参数key,可以不写,默认为"";

  • name:和value作用一样,通常使用name;

  • required:是否必须传,默认值为true,可以不写,这边如果是false则表示可以不传,那么不传的会赋值为null,所以这边参数最好不要使用基本数据类型,因为如果是int、long啥的会赋值为0,之前就遇到过这样的情况,很坑,大家还是尽量使用对应的包装类吧;

  • defaultValue:默认值

  • 获取URL或者 form data 中的参数,可以是GET方式也可以是POST,只是参数必须是key-value的形式

 

插播一段@RequestParam和@PathVariable的区别

@RequestParam和@PathVariable都能够完成类似的功能——因为本质上,它们都是用户的输入,只不过输入的部分不同,一个在URL路径部分,另一个在参数部分。要访问一篇博客文章,这两种URL设计都是可以的:

  • 通过@PathVariable,例如/blogs/1
  • 通过@RequestParam,例如blogs?blogId=1

那么究竟应该选择哪一种呢?建议:

  1. 当URL指向的是某一具体业务资源(或者资源列表),例如博客,用户时,使用@PathVariable
  2. 当URL需要对资源或者资源列表进行过滤,筛选时,用@RequestParam

 

4、@RequestMapping

@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一。这个注解会将 HTTP 请求映射MVC 和 REST 控制器的处理方法上。 在 Spring MVC 应用程序中,RequestDispatcher (在 Front Controller 之下) 这个 servlet 负责将进入的 HTTP 请求路由到控制器的处理方法。

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

RequestMapping注解有六个属性,下面我们把她分成三类进行说明。

1、 value, method;

value:     指定请求的实际地址,指定的地址可以是URI Template 模式;

method:  指定请求的method类型, GET、POST、PUT、DELETE等;

2、 consumes,produces;

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

3、 params,headers;

params: 指定request中必须包含某些参数值是,才让该方法处理。

headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求

 

 

摘抄文章链接

https://www.cnblogs.com/qiankun-site/p/5774325.html#undefined

https://www.cnblogs.com/qiankun-site/p/5774300.html

https://blog.csdn.net/ff906317011/article/details/78552426

https://www.cnblogs.com/fangpengchengbupter/p/7826565.html

http://www.iteye.com/news/32657

https://www.cnblogs.com/qq78292959/p/3760560.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值