jackson json bean互转
原创 unique 发表于:2022-04-09 11:26:42
  阅读 :136   收藏   编辑

工具类

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.text.SimpleDateFormat;

@Slf4j
public class JacksonUtil {
  private static final ObjectMapper objectMapper = new ObjectMapper();

  static {
    objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"))
        .setFilterProvider(new SimpleFilterProvider().setFailOnUnknownId(false))
        .setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
        .registerModule(new Jdk8Module())
        .registerModule(new JavaTimeModule())
        .setSerializationInclusion(JsonInclude.Include.NON_NULL)
        .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);;
  }
  private JacksonUtil() {
  }

  /**
   * toJsonString
   *
   * @param object
   * @return
   */
  public static String toJsonString(Object object) {
    try {
      return objectMapper.writeValueAsString(object);
    } catch (JsonProcessingException e) {
      log.error("object [{}] to json string failed:{}", object.toString(), e.getMessage(), e);
      return null;
    }
  }

  /**
   * json格式字符串转换成对象
   *
   * @param json
   * @param clazz
   * @param <T>
   * @return
   */
  public static <T> T toObject(String json, Class<T> clazz) {
    try {
      return objectMapper.readValue(json, clazz);
    } catch (IOException e) {
      log.error("json [{}] to object {} failed:{}", json, clazz.toString(), e.getMessage(), e);
      return null;
    }
  }

  public static void main(String[] args) {
    Order order = new Order(1L, OrderType.FAIL, "测试");
    String jsonStr = JacksonUtil.toJsonString(order);
    log.info("jsonStr: {}", jsonStr);

    Order orderBean = JacksonUtil.toObject("{\"id\":1,\"orderType\":\"FAIL\",\"name\":\"测试\"}", Order.class);
    log.info("bean: {}", orderBean);
  }

}

实体类

import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
public class Order {
  private Long id;
  private OrderType orderType;
  private String name;

  public Order(Long id, OrderType orderType, String name) {
    this.id = id;
    this.orderType = orderType;
    this.name = name;
  }
}
public enum OrderType {
  DEFAULT,
  INIT,
  PENDING,
  SUCCESS,
  FAIL,
  CANCEL
}