序列化工具 专门用来处理一些需要序列化的对象
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 }