springmvc:(六) JSON

一、JSON

  1. JSON是一种轻量型数据交换格式,
  • 对象表示为键值对,数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组
  1. JSON 键值对是用来保存 JavaScript 对象的一种方式

二、JSON 和 JavaScript 对象互转

  • JSON字符串转换为JavaScript 对象,使用 JSON.parse() 方法:

    var obj = JSON.parse('{"a": "Hello", "b": "World"}'); 
    //结果是 {a: 'Hello', b: 'World'}
    
  • JavaScript 对象转换为JSON字符串,使用 JSON.stringify() 方法:

    var json = JSON.stringify({a: 'Hello', b: 'World'});
    //结果是 '{"a": "Hello", "b": "World"}'
    

三、Controller返回JSON数据

  • Jackson是目前比较好的json解析工具
  • 还有阿里巴巴的 fastjson
  1. Jackson使用

    • 导入jar包
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.8</version>
    </dependency>
    
    • 配置web.xml

    • 配置springmvc.xml

    • 编写实体类

    • 编写Controller

      @Controller
      public class UserController {
      
          @RequestMapping("/json1")
          @ResponseBody
          public String json1() throws JsonProcessingException {
              //创建一个jackson的对象映射器,用来解析数据
              ObjectMapper mapper = new ObjectMapper();
              //创建一个对象
              User user = new User("lufei", 10, "女");
              //将我们的对象解析成为json格式
              String str = mapper.writeValueAsString(user);
              //由于@ResponseBody注解,这里会将str转成json格式返回;十分方便
              return str;
          }
      
      }
      

      如果出现了乱码

      //produces:指定响应体返回类型和编码
      @RequestMapping(value = "/json1",produces = "application/json;charset=utf-8")
      
    • 如果项目中有很多请求,则需要统一处理乱码,在springmvc配置文件中

      <mvc:annotation-driven>
          <mvc:message-converters register-defaults="true">
              <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                  <constructor-arg value="UTF-8"/>
              </bean>
              <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                  <property name="objectMapper">
                      <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                          <property name="failOnEmptyBeans" value="false"/>
                      </bean>
                  </property>
              </bean>
          </mvc:message-converters>
      </mvc:annotation-driven>
      

      四、返回字符串统一解决

      在类上直接使用 @RestController ,这样子,里面所有的方法都只会返回 json 字符串了,不用再每一个都添加@ResponseBody !我们在前后端分离开发中,一般都使用 @RestController ,十分便捷!

      @RestController
      public class UserController {
      
          //produces:指定响应体返回类型和编码
          @RequestMapping(value = "/json1")
          public String json1() throws JsonProcessingException {
              //创建一个jackson的对象映射器,用来解析数据
              ObjectMapper mapper = new ObjectMapper();
              //创建一个对象
              User user = new User("lufei", 10, "男");
              //将我们的对象解析成为json格式
              String str = mapper.writeValueAsString(user);
              //由于@ResponseBody注解,这里会将str转成json格式返回;十分方便
              return str;
          }
      
      }
      

    五、输出时间对象

    @RequestMapping("/json3")
    public String json3() throws JsonProcessingException {
    
        ObjectMapper mapper = new ObjectMapper();
    
        //创建时间一个对象,java.util.Date
        Date date = new Date();
        //将我们的对象解析成为json格式
        String str = mapper.writeValueAsString(date);
        return str;
    }
    
    • Jackson 默认是会把时间转成timestamps形式
原文地址:https://www.cnblogs.com/dreamzone/p/12485665.html