1 import com.fasterxml.jackson.core.JsonProcessingException; 2 import com.fasterxml.jackson.core.type.TypeReference; 3 import com.fasterxml.jackson.databind.DeserializationFeature; 4 import com.fasterxml.jackson.databind.JavaType; 5 import com.fasterxml.jackson.databind.ObjectMapper; 6 import com.fasterxml.jackson.databind.SerializationFeature; 7 import lombok.extern.slf4j.Slf4j; 8 import org.springframework.util.StringUtils; 9 10 import java.io.IOException; 11 import java.text.SimpleDateFormat; 12 13 @Slf4j 14 public class JacksonUtil { 15 16 public final static ObjectMapper mapper = new ObjectMapper(); 17 // 日期格式化 18 private static final String STANDARD_FORMAT = "yyyy-MM--dd HH:mm:ss"; 19 20 static { 21 // 取消默认的timestamp转换 22 mapper.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false); 23 // 忽略空bean转json的错误 24 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); 25 // 设置日期格式 26 mapper.setDateFormat(new SimpleDateFormat(STANDARD_FORMAT)); 27 // 忽略json中存在,但java对象中不存在对应属性的情况 28 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 29 30 } 31 32 /** 33 * Object转字符串 34 * 35 * @param obj 36 * @param <T> 37 * @return 38 */ 39 public static <T> String object2String(T obj) { 40 if (obj == null) { 41 return null; 42 } 43 try { 44 return obj instanceof String ? (String) obj : mapper.writeValueAsString(obj); 45 } catch (JsonProcessingException e) { 46 log.warn("Parse Object to String error: {}", e.getMessage()); 47 return null; 48 } 49 } 50 51 /** 52 * 转美化的 格式化的Json字符串 53 * 54 * @param obj 55 * @param <T> 56 * @return 57 */ 58 public static <T> String object2StringPretty(T obj) { 59 if (obj == null) { 60 return null; 61 } 62 try { 63 return obj instanceof String ? (String) obj : mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj); 64 } catch (JsonProcessingException e) { 65 log.warn("Parse Object to String error: {}", e.getMessage()); 66 return null; 67 } 68 } 69 70 /** 71 * json转java对象 72 * 73 * @param json 74 * @param clazz 75 * @param <T> 76 * @return 77 */ 78 public static <T> T string2Object(String json, Class<T> clazz) { 79 if (StringUtils.isEmpty(json) || clazz == null) { 80 return null; 81 } 82 try { 83 return String.class.equals(clazz) ? (T) json : mapper.readValue(json, clazz); 84 } catch (IOException e) { 85 log.warn("Parse String to Object error: {}", e.getMessage()); 86 return null; 87 } 88 } 89 90 /** 91 * json转集合类型 92 * 93 * @param json 94 * @param collectionClazz 95 * @param elementClazz 96 * @param <T> 97 * @return 98 */ 99 public static <T> T string2Object(String json, Class<?> collectionClazz, Class<?> elementClazz) { 100 if (StringUtils.isEmpty(json) || collectionClazz == null || elementClazz == null) { 101 return null; 102 } 103 JavaType javaType = mapper.getTypeFactory().constructParametricType(collectionClazz, elementClazz); 104 try { 105 return mapper.readValue(json, javaType); 106 } catch (IOException e) { 107 log.warn("Parse String to Object error: {}", e.getMessage()); 108 return null; 109 } 110 } 111 112 /** 113 * json转java对象 114 * 可以转集合类型,如 string2Object(json, new TypeReference<List<User>>() {}) 115 * 116 * @param json 117 * @param typeReference 118 * @param <T> 119 * @return 120 */ 121 public static <T> T string2Object(String json, TypeReference<T> typeReference) { 122 if (StringUtils.isEmpty(json) || typeReference == null) { 123 return null; 124 } 125 try { 126 return typeReference.getType().equals(String.class) ? (T) json : mapper.readValue(json, typeReference); 127 } catch (IOException e) { 128 log.warn("Parse String to Object error: {}", e.getMessage()); 129 return null; 130 } 131 } 132 }