1 import com.fasterxml.jackson.annotation.JsonInclude;
2 import com.fasterxml.jackson.core.JsonProcessingException;
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 org.apache.commons.lang3.StringUtils;
8 import org.slf4j.LoggerFactory;
9 import org.springframework.beans.factory.InitializingBean;
10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.stereotype.Component;
12
13 import java.io.IOException;
14 import java.text.DateFormat;
15 import java.text.SimpleDateFormat;
16 import java.util.ArrayList;
17 import java.util.HashMap;
18
19 /**
20 * jackson 序列化列。
21 */
22 @Component
23 public class JsonUtils implements InitializingBean {
24
25 @Autowired
26 private ObjectMapper jacksonObjectMapper;
27
28 public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
29 private static org.slf4j.Logger logger = LoggerFactory.getLogger(JsonUtils.class);
30 private static final DateFormat defalultSdf = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
31
32 private static ObjectMapper objectMapper;
33
34 static {
35 objectMapper = new ObjectMapper();
36 objectMapper.setDateFormat(defalultSdf);
37 objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
38 objectMapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
39 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
40 }
41
42
43 public static ObjectMapper getObjectMapper() {
44 return objectMapper;
45 }
46
47
48 public static JavaType getHashMapType(Class<?> keyCls, Class<?> valCls) {
49 return objectMapper.getTypeFactory().constructParametricType(HashMap.class, keyCls, valCls);
50 }
51
52 public static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
53 return objectMapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
54 }
55
56 /**
57 * 序列化为一个Map
58 *
59 * @param src String文本
60 * @param keyCls Map key 类型。
61 * @param valCls Map Value 类型。
62 * @param <T>
63 * @return
64 */
65 public static <T> T fromStringAsMap(String src, Class<?> keyCls, Class<?> valCls) {
66 JavaType javaType = getHashMapType(keyCls, valCls);
67 return fromString(src, javaType);
68 }
69
70 /**
71 * 序列化一个泛型List
72 *
73 * @param src String文本
74 * @param valCls List value 类型。
75 */
76 public static <T> T fromStringAsList(String src, Class<?> valCls) {
77 JavaType javaType = getCollectionType(ArrayList.class, valCls);
78 return fromString(src, javaType);
79 }
80
81 public static <T> T fromString(String src, JavaType t) {
82
83 if (StringUtils.isBlank(src)) {
84 return null;
85 }
86
87 try {
88 return objectMapper.readValue(src, t);
89 } catch (IOException e) {
90 logger.error("parse json err . ", e.getMessage());
91 }
92
93 return null;
94 }
95
96 public static <T> T fromString(String src, Class<T> t) {
97
98 if (StringUtils.isBlank(src)) {
99 return null;
100 }
101
102 try {
103
104 T object = objectMapper.readValue(src, t);
105 return object;
106
107 } catch (IOException e) {
108 logger.error("write json err . ", e.getMessage());
109 }
110
111 return null;
112 }
113
114
115 public static <T> String toString(T t) {
116
117 if (t == null) {
118 return "";
119 }
120
121 try {
122 return objectMapper.writeValueAsString(t);
123 } catch (JsonProcessingException e) {
124 logger.error("write json err . ", e.getMessage());
125 }
126
127 return "";
128 }
129
130 @Override
131 public void afterPropertiesSet() {
132 //spring 配置覆盖默认
133 objectMapper = jacksonObjectMapper;
134
135 }
136 }