SpringMVC笔记--9JSON和ResponseBody

本文深入探讨Spring MVC框架中@ResponseBody与@RequestBody注解的使用方法与场景。详细解释了如何通过@ResponseBody将Java对象转换为JSON响应,以及如何使用@RequestBody将JSON数据转换为Java对象。此外,还介绍了必要的Jackson库及其依赖。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文涉及少许的HttpMessageConverter知识,可以看之前的Spring类型转换。

本文的内容及JSON的内容。

1 @ResponseBody注解解释

@Responsebody 注解在控制器中的映射方法上,如

@RequestMapping(value = "user/login")
@ResponseBody //不加这个注解会使用视图解析器,所以必须加
// 将ajax(datas)发出的请求写入 User 对象中,返回json对象响应回去
public User login(User user) {   
    User user = new User();
    user.setUserid(1);
    user.setUsername("MrF");
    user.setStatus("1");
    return user ;//返回一个java类对象,ResponseBody会转换成json
}

作用:

@Responsebody 注解表示该【方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中】,加上这个注解后我们就不走视图解析器了,而是处理完后直接将对象写入HTTP 响应正文中(response的body数据区),写入的这个对象不是java对象,而是通过HttpMessageConverter转换后的如json对象,但能表达java对象的含义。

使用时机:

返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;如我们要获取一些json,因为json可以用再我们的js页面中,而java对象再js中不能用它。如下使用ajax异步发送了请求,获得了一些json

function login() {
    var datas = '{"username":"' + $('#username').val() + '","userid":"' + $('#userid').val() + '","status":"' + $('#status').val() + '"}';
    $.ajax({
        type : 'POST',
        contentType : 'application/json',
        url : "${pageContext.request.contextPath}/user/login",//要访问服务器端的login
        processData : false,
        dataType : 'json',
        data : datas,
        success : function(data) {
            alert("userid: " + data.userid + "username: " + data.username + "status: "+ data.status);
        },
        error : function(XMLHttpRequest, textStatus, errorThrown) {
            alert("出现异常,异常信息:"+textStatus,"error");
        }
    });
};

异步获取 json 数据,加上 @Responsebody 注解后,就会直接返回 json 数据。

需要的jar 包:

下载地址 http://wiki.fasterxml.com/JacksonDownload/

jackson-annotations-2.1.5.jar
jackson-core-2.1.5.jar
jackson-databind-2.1.5.jar

响应头:

Content-Type:text/html;charset=UTF-8

Content-Type:application/json;charset=UTF-8

2 @RequestBody注解解释

上面的@ResponseBody注解我们是把java转成了json,而@RequestBody 是将js页面传来的json转换成java对象,传入到方法形参中,json转成java对象也使用了HttpMessageConverter。json来自HTTP 请求body正文

使用时机:

A) GET、POST方式提时, 根据request的 header的 Content-Type的值来判断:

  • application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
  • multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);
  • 其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);

B) PUT方式提交时, 根据request header Content-Type的值来判断:

  • application/x-www-form-urlencoded, 必须;
  • multipart/form-data, 不能处理;
  • 其他格式, 必须;

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

例如:

@RequestMapping(value = "user/login")
@ResponseBody
// 将ajax(datas)发出的请求写入 User 对象中
public User login(@RequestBody User user) {   
// 这样就不会再被解析为跳转路径,而是直接将user对象写入 HTTP 响应正文中
    return user;    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值