2
0

JacksonUtil.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. package com.imed.costaccount.common.util;
  2. import cn.hutool.core.util.StrUtil;
  3. import com.fasterxml.jackson.annotation.JsonInclude;
  4. import com.fasterxml.jackson.core.JsonProcessingException;
  5. import com.fasterxml.jackson.core.type.TypeReference;
  6. import com.fasterxml.jackson.databind.DeserializationFeature;
  7. import com.fasterxml.jackson.databind.JavaType;
  8. import com.fasterxml.jackson.databind.ObjectMapper;
  9. import com.fasterxml.jackson.databind.SerializationFeature;
  10. import lombok.extern.slf4j.Slf4j;
  11. import java.io.IOException;
  12. import java.text.SimpleDateFormat;
  13. import java.util.HashMap;
  14. import java.util.Map;
  15. import java.util.Objects;
  16. /**
  17. * spring自带的jackson(json)工具类
  18. */
  19. @Slf4j
  20. public class JacksonUtil {
  21. private static ObjectMapper objectMapper = new ObjectMapper();
  22. // 日起格式化
  23. private static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";
  24. // 以下静态初始化可以根据需求去掉对应的
  25. static {
  26. //对象的所有字段全部列入
  27. objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
  28. //取消默认转换timestamps形式
  29. objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
  30. //忽略空Bean转json的错误
  31. objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
  32. //所有的日期格式都统一为以下的样式,即yyyy-MM-dd HH:mm:ss
  33. objectMapper.setDateFormat(new SimpleDateFormat(STANDARD_FORMAT));
  34. //忽略 在json字符串中存在,但是在java对象中不存在对应属性的情况。防止错误
  35. objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  36. }
  37. /**
  38. * 对象转json 字符串
  39. *
  40. * @param obj 对象
  41. * @return Json格式字符串
  42. */
  43. public static <T> String obj2Str(T obj) {
  44. try {
  45. return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
  46. } catch (JsonProcessingException e) {
  47. log.error("parse object to string error {}", e.getMessage());
  48. e.printStackTrace();
  49. return null;
  50. }
  51. }
  52. /**
  53. * 对象转Json格式字符串(格式化的Json字符串)
  54. *
  55. * @param obj 对象
  56. * @return 美化的Json格式字符串
  57. */
  58. public static <T> String obj2StrPretty(T obj) {
  59. if (obj == null) {
  60. return null;
  61. }
  62. try {
  63. return obj instanceof String ? (String) obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
  64. } catch (JsonProcessingException e) {
  65. log.warn("Parse Object to String error : {}", e.getMessage());
  66. return null;
  67. }
  68. }
  69. /**
  70. * json字符串转对象
  71. *
  72. * @param str json字符串
  73. * @param clazz clazz对象
  74. * @param <T> 泛型
  75. * @return T
  76. */
  77. public static <T> T str2Obj(String str, Class<T> clazz) {
  78. if (StrUtil.isBlank(str) || Objects.isNull(clazz)) {
  79. log.error("parse string to object error : Params is null");
  80. return null;
  81. }
  82. T t = null;
  83. try {
  84. t = clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz);
  85. } catch (JsonProcessingException e) {
  86. e.printStackTrace();
  87. }
  88. return t;
  89. }
  90. /**
  91. * 字符串转List等集合类型使用
  92. * 样例:
  93. * * JacksonUtil.string2ObjList(str,new TypeReference<List<User>>{})
  94. * @param str 字符串
  95. * @param typeReference 泛型包装
  96. * @param <T> 泛型
  97. * @return T
  98. *
  99. */
  100. public static <T> T str2ObjList(String str, TypeReference<T> typeReference) {
  101. if (StrUtil.isBlank(str) || Objects.isNull(typeReference)) {
  102. log.error("parse string to object error : Params is null");
  103. return null;
  104. }
  105. try {
  106. return (T) (typeReference.getType().equals(String.class) ? str : objectMapper.readValue(str, typeReference));
  107. } catch (JsonProcessingException e) {
  108. log.warn("Parse String to Object error", e);
  109. return null;
  110. }
  111. }
  112. /**
  113. * 字符串转List等集合类型使用
  114. * 样例:
  115. * JacksonUtil.string2ObjList(str,List.class,User.class)
  116. * @param str json字符串
  117. * @param collectionClazz 集合class对象
  118. * @param elementClazzs 元素class对象
  119. * @param <T> 返回的类型
  120. * @return T
  121. */
  122. public static <T> T str2ObjList(String str, Class<?> collectionClazz, Class<?>... elementClazzs) {
  123. JavaType javaType = objectMapper.getTypeFactory().constructParametricType(collectionClazz, elementClazzs);
  124. try {
  125. return objectMapper.readValue(str, javaType);
  126. } catch (IOException e) {
  127. log.warn("Parse String to Object error : {}" + e.getMessage());
  128. return null;
  129. }
  130. }
  131. /**
  132. * json字符串转为泛型 Map<String,Object>
  133. * 可根据类型自己创建不同的泛型Map
  134. * @param str json字符串
  135. * @return
  136. */
  137. public static Map str2Map(String str) {
  138. JavaType javaType = objectMapper.getTypeFactory().constructParametricType(Map.class, String.class, Object.class);
  139. try {
  140. return objectMapper.readValue(str, javaType);
  141. } catch (JsonProcessingException e) {
  142. e.printStackTrace();
  143. return null;
  144. }
  145. }
  146. /**
  147. * 构建json字符串
  148. * @return json Str
  149. */
  150. public static JacksonUtil.JsonBuilder builder() {
  151. return new JacksonUtil.JsonBuilder();
  152. }
  153. public static class JsonBuilder {
  154. private Map<String, Object> map = new HashMap<>();
  155. JsonBuilder(){}
  156. public JacksonUtil.JsonBuilder put(String key, Object value) {
  157. map.put(key, value);
  158. return this;
  159. }
  160. public String build() {
  161. ObjectMapper objectMapper = new ObjectMapper();
  162. try {
  163. objectMapper.writeValueAsString(this.map);
  164. } catch (JsonProcessingException e) {
  165. e.printStackTrace();
  166. }
  167. return "{}";
  168. }
  169. }
  170. }