美文网首页
Spring注解之@ResponseBody、@RequestB

Spring注解之@ResponseBody、@RequestB

作者: 秋慕云 | 来源:发表于2019-01-11 18:29 被阅读0次

一、概念

  1. @ResponseBody 作用在方法上,表示该方法的返回结果直接写入 HTTP 响应正文中,一般在异步获取数据时使用,即,AJAX请求。
    通常在方法上使用 @RequestMapping注解后,方法执行完成后的返回值,通常解析为跳转路径,即,跳转到某个页面,比如登录成功后跳转到管理页面。但是如果此刻再在方法上加上 @ResponseBody注解后,方法返回的结果将不会再被解析为跳转路径,而是直接写入 HTTP响应正文中。

  2. @RequestBody是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 或者 json等格式】封装为对应的 JavaBean 对象,当然,也可以将其分别绑定到对应的字符串上,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。

二、举例

1. @ResponseBody

前端ajax代码如下:

$.ajax({
            type:"get",
            url:"/spring/responseBody/getData.ajax",
            dateType:"json",
            success:function (data) {
                $("#userName").val(data.userName);
                $("#address").val(data.address);
            }
 });

后台代码如下:

@RequestMapping("/getData.ajax")
@ResponseBody
public User login(User user){
  return user;
}

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

User字段如下:

public class User {
  private String userName;
  private String address;
  ……
  // get/set方法
}

那么在前台接收到的数据为:'{"userName":"xxx","address":"xxx"}'

2. @RequestBody

前端代码如下:

$.ajax({
   url:"/spring/requestBody/login.ajax",
   type:"POST",
   data:'{
           "userName":"admin",
           "password":"admin"
     }',
     content-type:"application/json charset=utf-8",
     success:function(data){
         alert("request success ! ");
     }
});

注意:
@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,当传递对象时,可用 JSON.stringify(data)的方式就能将对象变成字符串,同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List。

后台代码如下:

@requestMapping("/login.ajax")
public void login(@requestBody String userName,@requestBody String password){
  User user = checkLogin(userName, password);
    session.setAttribute("user", user);
    return new JsonResult(user);
}

上面代码等同如下:

@RequestMapping("/login.ajax")
@ResponseBody
public Object login(@RequestBody User user, HttpSession session) {
    user = checkLogin(user);
    session.setAttribute("user", user);
    return new JsonResult(user);
}

相关文章

网友评论

      本文标题:Spring注解之@ResponseBody、@RequestB

      本文链接:https://www.haomeiwen.com/subject/mnbtdqtx.html