123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- package com.imed.costaccount.common.util;
- import cn.hutool.core.util.StrUtil;
- import com.fasterxml.jackson.annotation.JsonInclude;
- import com.fasterxml.jackson.core.JsonProcessingException;
- import com.fasterxml.jackson.core.type.TypeReference;
- import com.fasterxml.jackson.databind.DeserializationFeature;
- import com.fasterxml.jackson.databind.JavaType;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.SerializationFeature;
- import lombok.extern.slf4j.Slf4j;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Objects;
- /**
- * spring自带的jackson(json)工具类
- */
- @Slf4j
- public class JacksonUtil {
- private static ObjectMapper objectMapper = new ObjectMapper();
- // 日起格式化
- private static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";
- // 以下静态初始化可以根据需求去掉对应的
- static {
- //对象的所有字段全部列入
- objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
- //取消默认转换timestamps形式
- objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
- //忽略空Bean转json的错误
- objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
- //所有的日期格式都统一为以下的样式,即yyyy-MM-dd HH:mm:ss
- objectMapper.setDateFormat(new SimpleDateFormat(STANDARD_FORMAT));
- //忽略 在json字符串中存在,但是在java对象中不存在对应属性的情况。防止错误
- objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- }
- /**
- * 对象转json 字符串
- *
- * @param obj 对象
- * @return Json格式字符串
- */
- public static <T> String obj2Str(T obj) {
- try {
- return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
- } catch (JsonProcessingException e) {
- log.error("parse object to string error {}", e.getMessage());
- e.printStackTrace();
- return null;
- }
- }
- /**
- * 对象转Json格式字符串(格式化的Json字符串)
- *
- * @param obj 对象
- * @return 美化的Json格式字符串
- */
- public static <T> String obj2StrPretty(T obj) {
- if (obj == null) {
- return null;
- }
- try {
- return obj instanceof String ? (String) obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
- } catch (JsonProcessingException e) {
- log.warn("Parse Object to String error : {}", e.getMessage());
- return null;
- }
- }
- /**
- * json字符串转对象
- *
- * @param str json字符串
- * @param clazz clazz对象
- * @param <T> 泛型
- * @return T
- */
- public static <T> T str2Obj(String str, Class<T> clazz) {
- if (StrUtil.isBlank(str) || Objects.isNull(clazz)) {
- log.error("parse string to object error : Params is null");
- return null;
- }
- T t = null;
- try {
- t = clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz);
- } catch (JsonProcessingException e) {
- e.printStackTrace();
- }
- return t;
- }
- /**
- * 字符串转List等集合类型使用
- * 样例:
- * * JacksonUtil.string2ObjList(str,new TypeReference<List<User>>{})
- * @param str 字符串
- * @param typeReference 泛型包装
- * @param <T> 泛型
- * @return T
- *
- */
- public static <T> T str2ObjList(String str, TypeReference<T> typeReference) {
- if (StrUtil.isBlank(str) || Objects.isNull(typeReference)) {
- log.error("parse string to object error : Params is null");
- return null;
- }
- try {
- return (T) (typeReference.getType().equals(String.class) ? str : objectMapper.readValue(str, typeReference));
- } catch (JsonProcessingException e) {
- log.warn("Parse String to Object error", e);
- return null;
- }
- }
- /**
- * 字符串转List等集合类型使用
- * 样例:
- * JacksonUtil.string2ObjList(str,List.class,User.class)
- * @param str json字符串
- * @param collectionClazz 集合class对象
- * @param elementClazzs 元素class对象
- * @param <T> 返回的类型
- * @return T
- */
- public static <T> T str2ObjList(String str, Class<?> collectionClazz, Class<?>... elementClazzs) {
- JavaType javaType = objectMapper.getTypeFactory().constructParametricType(collectionClazz, elementClazzs);
- try {
- return objectMapper.readValue(str, javaType);
- } catch (IOException e) {
- log.warn("Parse String to Object error : {}" + e.getMessage());
- return null;
- }
- }
- /**
- * json字符串转为泛型 Map<String,Object>
- * 可根据类型自己创建不同的泛型Map
- * @param str json字符串
- * @return
- */
- public static Map str2Map(String str) {
- JavaType javaType = objectMapper.getTypeFactory().constructParametricType(Map.class, String.class, Object.class);
- try {
- return objectMapper.readValue(str, javaType);
- } catch (JsonProcessingException e) {
- e.printStackTrace();
- return null;
- }
- }
- /**
- * 构建json字符串
- * @return json Str
- */
- public static JacksonUtil.JsonBuilder builder() {
- return new JacksonUtil.JsonBuilder();
- }
- public static class JsonBuilder {
- private Map<String, Object> map = new HashMap<>();
- JsonBuilder(){}
- public JacksonUtil.JsonBuilder put(String key, Object value) {
- map.put(key, value);
- return this;
- }
- public String build() {
- ObjectMapper objectMapper = new ObjectMapper();
- try {
- objectMapper.writeValueAsString(this.map);
- } catch (JsonProcessingException e) {
- e.printStackTrace();
- }
- return "{}";
- }
- }
- }
|