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,即可使用

  1. <dependency>
  2. <groupId>com.fasterxml.jackson.core</groupId>
  3. <artifactId>jackson-databind</artifactId>
  4. <version>2.11.3</version>
  5. </dependency>

2、简单使用

  1. // 返回值转换
  2. @ResponseBody
  3. @RequestMapping(value = "/d01")
  4. public UserDto demo01(){
  5. return new UserDto().setUsername("李四").setAge(18);
  6. }
  7. // 接受参数转换
  8. @ResponseBody
  9. @RequestMapping(value = {"/d02","/d03"})
  10. public UserDto demo02(@RequestBody UserDto userDto){
  11. return userDto;
  12. }

其他说明:

  • 对于时间格式,可以使用 @JsonFormat(pattern=””) 进行指定

@RequestBody 只支持标注格式的 Json 字符串,在前端请求时的代码如下:
1、使用 XMLHttpRequest :

  1. var xhr = new XMLHttpRequest();
  2. xhr.open("post","${pageContext.request.contextPath}/users?" + new Data().getTime());
  3. xhr.setRequestHeader("content-type","application/json"); // 设置请求头
  4. xhr.send('{"username":"李四","age":18}'); // 传递json串

2、使用ajax:

  1. $.ajax({
  2. type:"post",
  3. url:"${pageContext.request.contextPath}/users",
  4. data:'{"username":"李四","age":18}',
  5. dataType:"json",
  6. contentType:"application/json",
  7. success:function(return){
  8. },
  9. failure:function(throw){
  10. }
  11. });

使用 fastJson

使用 fastJson:
1、先导入依赖

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version>1.2.60</version>
  5. </dependency>

2、配置转换器

  • 时间注解:@JsonField(format=””) ```xml
    1. <!-- 支持所有类型 -->
    2. <value>*/*</value>
    1. <!-- 支持所有类型 -->
    2. <value>*/*</value>
    1. <!-- 格式化参数 -->
    2. <value>WriteMapNullValue</value>
    3. <value>QuoteFieldNames</value>
    4. <value>WriteDateUseDateFormat</value>

```