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>
```