Spring 常用注解 @RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别

Spring 常用注解 @RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别

1、@RequestMapping

​ @RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径;用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法,此处需注意@RequestMapping用在类上可以没有,但是用在方法上必须有。

​ 在此顺便说一下 **@PathVariable 注解,其用来获取其求路径 url 中的动态参数。**比如页面发出请求:

function login() {
    var url = "${pageContext.request.contextPath}/person/login/";
    var query = $('#id').val() + '/' + $('#name').val() + '/' + $('#status').val();
    url += query;
    $.get(url, function(data) {
        alert("id: " + data.id + "name: " + data.name + "status: "
                + data.status);
    });
}
/**
* @RequestMapping(value = "user/login/{id}/{name}/{status}") 中的 {id}/{name}/{status}
* 与 @PathVariable int id、@PathVariable String name、@PathVariable boolean status
* 一一对应,按名匹配。
*/
 
@RequestMapping(value = "user/login/{id}/{name}/{status}")
@ResponseBody
// @PathVariable 注解下的数据类型均可用
public User login(@PathVariable int id, @PathVariable String name, @PathVariable boolean status) {
	// 返回一个 User 对象响应 ajax 的请求
    return new User(id, name, status);
}
2、@ResponseBody

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

注意:① 该注解用于将 Controller 的方法返回的对象,通过适当的 HttpMessageConverter 转换为指定格式后,写入到 Response 对象的 body 数据区。
	② 适用于不是返回的 html 标签的页面,而是其他某种格式的数据(如 json、xml 等)使用。
	③ 当方法上面没有写 ResponseBody 注解时,底层会将方法的返回值封装为 ModelAndView 对象。
	④ 如果是字符串,则直接将字符串写到客户端,默认按 ISO8859-1 编码(页面可能出现乱码),可使用 @RequestMapping(value="/cat/query",produces="text/html;charset=utf-8") 来改变编码格式;假如是一个对象,会调用对象的 getXxx() 方法获取属性值并且以键值对的形式进行封装进而转化为 json 串;如果是 map 集合,采用 get(key) 方式获取 value 值,然后进行封装。
3、@ResponseBody
  • 原理

    • 该注解用于读取 Request 请求的 body 部分数据,使用系统默认配置的 HttpMessageConverter 进行解析,然后把相应的数据绑定到要返回的 对象上
    • 再把 HttpMessageConverter 返回的对象数据绑定到 Controller 中方法的参数上
  • 使用时间

    • 使用 Get、Post 方式提交时,根据 Request header Content-Type 的值来判断

      • application/x-www-form-urlencoded:可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理)
      • multipart/form-data:不能处理(即使用@RequestBody不能处理这种格式的数据)
      • 其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理)
    • Put 方式提交时, 根据 Request header Content-Type 的值来判断:

      • application/x-www-form-urlencoded:必须;

      • multipart/form-data:不能处理;其他格式, 必须;

        说明:request 的 body 部分的数据编码格式由 header 部分的 Content-Type 指定;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值