每次忘了就去看,看了过几天又忘了。。。。心累,这次自己总结一波吧,摘抄自各大优秀博客,链接都在文末给出。
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
那么究竟应该选择哪一种呢?建议:
- 当URL指向的是某一具体业务资源(或者资源列表),例如博客,用户时,使用@PathVariable
- 当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等;
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
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