Json 在企业开发中已经作为通用的接口参数类型,在页面(客户端)解析很方便,SpringMVC默认提供了对 json 的支持
两个注解:
- @ResponseBody:该注解用于将 Controller 的方法返回的对象,通过适当的 HttpMessageConverter 转换为指定格式后,写入到 Response 对象的 body 数据区,支持注解在类上,方法上
- @RequestBody:该注解用于读取Request请求的body部分数据,使用系统默认配置的 HttpMessageConverter 进行解析,然后把相应的数据绑定到要返回的对象上,再把 httpMessageConverter 返回的对象数据绑定到 controller 中方法的参数上
- @RequestBody 注解常用来处理 content-type 不是默认的 application/x-www-form-urlcoded 类型的内容,比如 application/json 或 application/xml 等,通常用来处理 application/json 类型
- 通过 @RequestBody 注解,可以将请求体中的 json 字符串绑定到相应的 bean 上,也可以将其分别绑定到对应的字符串上
- 注意:@RequestBody 接受的是一个 json 格式的字符串,必须为一个字符串
使用方法:
1、导入 json 解析依赖:
SpringMVC 默认的 JSON 解决方案是 Jackson,所以只需要导入 jackson 的 jar,即可使用
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.3</version></dependency>
2、简单使用
// 返回值转换@ResponseBody@RequestMapping(value = "/d01")public UserDto demo01(){return new UserDto().setUsername("李四").setAge(18);}// 接受参数转换@ResponseBody@RequestMapping(value = {"/d02","/d03"})public UserDto demo02(@RequestBody UserDto userDto){return userDto;}
其他说明:
- 对于时间格式,可以使用 @JsonFormat(pattern=””) 进行指定
@RequestBody 只支持标注格式的 Json 字符串,在前端请求时的代码如下:
1、使用 XMLHttpRequest :
var xhr = new XMLHttpRequest();xhr.open("post","${pageContext.request.contextPath}/users?" + new Data().getTime());xhr.setRequestHeader("content-type","application/json"); // 设置请求头xhr.send('{"username":"李四","age":18}'); // 传递json串
2、使用ajax:
$.ajax({type:"post",url:"${pageContext.request.contextPath}/users",data:'{"username":"李四","age":18}',dataType:"json",contentType:"application/json",success:function(return){},failure:function(throw){}});
使用 fastJson
使用 fastJson:
1、先导入依赖
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.60</version></dependency>
2、配置转换器
- 时间注解:@JsonField(format=””)
```xml
<!-- 支持所有类型 --><value>*/*</value>
<!-- 支持所有类型 --><value>*/*</value>
<!-- 格式化参数 --><value>WriteMapNullValue</value><value>QuoteFieldNames</value><value>WriteDateUseDateFormat</value>
```
