SpringMVC -> 使用jackson将对象转化为json对象,jackson工具类

  • Post author:
  • Post category:其他




导包jackson-databind

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.11.3</version>
    </dependency>



方法一:创建jackson对象,调用方法转化为json


对象

  @ResponseBody
  @RequestMapping("/user1")
  public String user1() throws JsonProcessingException {
    //创建一个jackson对象,用来解析数据
    ObjectMapper mapper = new ObjectMapper();
    User user = new User(11, "rod", 22);
    //使用writeValueAsString方法将user转化为json对象
    return mapper.writeValueAsString(user);
  }


集合list

  @ResponseBody
  @RequestMapping("/user1")
  public String user2() throws JsonProcessingException {
    //创建一个jackson对象,用来解析数据
    ObjectMapper mapper = new ObjectMapper();
    User user = new User(11, "rod", 22);
    //使用writeValueAsString方法将user转化为json对象
    ArrayList<User> list = new ArrayList<>();
    list.add(user);
    return mapper.writeValueAsString(list);
  }


日期date

  @ResponseBody
  @RequestMapping("/user1")
  public String user1() throws JsonProcessingException {
    //创建一个jackson对象,用来解析数据
    ObjectMapper mapper = new ObjectMapper();
    //创建时间一个对象,java.util.Date ,没有格式化的date的秒来计算的,时间戳
    Date date = new Date();
    //自定义日期格式对象
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //日期格式化后,将我们的对象解析成为json格式
    return mapper.writeValueAsString(format.format(date));
  }



方式二:创建一个工具类,用来格式化json

没优化前:有两个参数,不是日期类,调用还要输入日期格式就麻烦

public class JsonUtils {
  //静态方法,拿来即用
  public static String getJson(Object object,String dateformat){
    ObjectMapper mapper = new ObjectMapper();
    //不使用时间差的方式  WRITE_DATE_KEYS_AS_TIMESTAMPS:将日期键作为时间戳写入 改为false
    mapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS,false);
    SimpleDateFormat format = new SimpleDateFormat(dateformat);
    //指定日期格式
    mapper.setDateFormat(format);
    try {
      return mapper.writeValueAsString(object);
    } catch (JsonProcessingException e) {
      e.printStackTrace();
    }
    //如果有异常,就返回null
    return null;
  }
}

优化后的工具类:调用getJson,默认日期格式yyyy-MM-dd HH:mm:ss,其他对象正常调用一个参数的getJson就可以

public class JsonUtils {
  /**
   * 功能描述: 重载方法,只传入一个object就可以,默认的日期格式就是"yyyy-MM-dd HH:mm:ss"
   * @return java.lang.String
   */
  public static String getJson(Object object) {
    return getJson(object, "yyyy-MM-dd HH:mm:ss");
  }

  //静态方法,拿来即用,日期就输入格式,不是日期就调用上面的,就日期格式也不影响
  public static String getJson(Object object, String dateformat) {
    ObjectMapper mapper = new ObjectMapper();
    //不使用时间差的方式  WRITE_DATE_KEYS_AS_TIMESTAMPS:将日期键作为时间戳写入 改为false
    mapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS, false);
    SimpleDateFormat format = new SimpleDateFormat(dateformat);
    //指定日期格式
    mapper.setDateFormat(format);
    try {
      //就是不是日期对象也不影响,都是正常调用了writeValueAsString方法
      return mapper.writeValueAsString(object);
    } catch (JsonProcessingException e) {
      e.printStackTrace();
    }
    //如果有异常,就返回null
    return null;
  }
}



版权声明:本文为rod0320原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。