package util; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.text.SimpleDateFormat; /** * Created by shangyl on 15/4/21. * json處理類 */ @SuppressWarnings({"unchecked"}) public class JacksonUtil { private static ObjectMapper objectMapper; static { objectMapper = generateMapper(JsonInclude.Include.NON_EMPTY); } private JacksonUtil() { } /** * 將json經過類型轉換成對象 */ public static <T> T fromJson(String json, Class<T> clazz) throws IOException { return clazz.equals(String.class) ? (T) json : objectMapper.readValue(json, clazz); } /** * 將json經過類型轉換成對象 */ public static <T> T fromJson(String json, TypeReference<?> typeReference) throws IOException { return (T) (typeReference.getType().equals(String.class) ? json : objectMapper.readValue(json, typeReference)); } /** * 將對象轉換成json */ public static <T> String toJson(T src) throws IOException { return src instanceof String ? (String) src : objectMapper .writeValueAsString(src); } /** * 將對象轉換成json, 能夠設置輸出屬性 */ public static <T> String toJson(T src, JsonInclude.Include include) throws IOException { if (src instanceof String) { return (String) src; } else { ObjectMapper customMapper = generateMapper(include); return customMapper.writeValueAsString(src); } } /** * 將對象轉換成json, 傳入配置對象 */ public static <T> String toJson(T src, ObjectMapper mapper) throws IOException { if (null != mapper) { if (src instanceof String) { return (String) src; } else { return mapper.writeValueAsString(src); } } else { return null; } } /** */ public static ObjectMapper mapper() { return objectMapper; } /** * 經過Inclusion建立ObjectMapper對象 */ private static ObjectMapper generateMapper(JsonInclude.Include include) { ObjectMapper customMapper = new ObjectMapper(); // 設置輸出時包含屬性的風格 customMapper.setSerializationInclusion(include); // 設置輸入時忽略在JSON字符串中存在但Java對象實際沒有的屬性 // customMapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 禁止使用int表明Enum的order()來反序列化Enum,很是危險 // customMapper.configure(Feature.FAIL_ON_NUMBERS_FOR_ENUMS, true); // 全部日期格式都統一爲如下樣式 customMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); return customMapper; } }