1 package com.hikvision.cloud.iep.common.util; 2 3 import java.util.Map; 4 import org.slf4j.Logger; 5 import org.slf4j.LoggerFactory; 6 import com.fasterxml.jackson.core.type.TypeReference; 7 import com.fasterxml.jackson.databind.ObjectMapper; 8 import com.hikvision.cloud.iep.common.json.CustomObjectMapper; 9 10 11 /** 12 * JSON 工具类 13 * 14 * @author huangyong 15 * @since 1.0.0 16 */ 17 public final class JsonUtil { 18 19 private static Logger logger = LoggerFactory.getLogger(JsonUtil.class); 20 21 private static ObjectMapper objectMapper = new CustomObjectMapper(); 22 23 /** 24 * 将 POJO 对象转为 JSON 字符串 25 */ 26 public static <T> String toJson(T pojo) { 27 String json; 28 try { 29 json = objectMapper.writeValueAsString(pojo); 30 } catch (Exception e) { 31 throw new RuntimeException("转换json格式异常"); 32 } 33 return json; 34 } 35 36 /** 37 * 将 JSON 字符串转为 POJO 对象 38 */ 39 public static <T> T fromJson(String json, Class<T> type) { 40 T pojo =null; 41 try { 42 pojo = objectMapper.readValue(json, type); 43 } catch (Exception e) { 44 logger.error("json格式错误"+json +"***type:***" +type); 45 } 46 return pojo; 47 } 48 49 /** 50 * JSON串转换为Java泛型对象,可以是各种类型,此方法最为强大。用法看测试用例。 51 * @param <T> 52 * @param jsonString JSON字符串 53 * @param tr TypeReference,例如: new TypeReference< List<FamousUser> >(){} 54 * @return List对象列表 55 */ 56 public static <T> T toCollection(String jsonStr, TypeReference<T> typeReference) { 57 try { 58 return objectMapper.readValue(jsonStr, typeReference); 59 } catch (Exception e) { 60 throw new RuntimeException("json格式错误"+jsonStr); 61 } 62 } 63 64 @SuppressWarnings("unchecked") 65 public static Map<String, Object> json2map(String jsonStr) { 66 try { 67 68 return objectMapper.readValue(jsonStr, Map.class); 69 } catch (Exception e ) { 70 throw new RuntimeException("json格式错误"+jsonStr); 71 } 72 } 73 74 @SuppressWarnings("rawtypes") 75 public static <T> T map2pojo(Map map, Class<T> clazz) { 76 return objectMapper.convertValue(map, clazz); 77 } 78 }