解決方案:使用 jackson
1.創建utils類
package com.mybatis.plus.utils; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; @Slf4j public class JsonUtils { private static ObjectMapper mapper = new ObjectMapper(); static { // 對於空的對象轉json的時候不拋出錯誤 mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); // 允許屬性名稱沒有引號 mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); // 允許單引號 mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); // 設置輸入時忽略在json字符串中存在但在java對象實際沒有的屬性 mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); // 設置輸出時包含屬性的風格 mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); } /** * 序列化,將對象轉化為json字符串 * * @param data * @return */ public static String toJsonString(Object data) { if (data == null) { return null; } String json = null; try { json = mapper.writeValueAsString(data); } catch (JsonProcessingException e) { log.error("[{}] toJsonString error:{{}}", data.getClass().getSimpleName(), e); } return json; } /** * 反序列化,將json字符串轉化為對象 * * @param json * @param clazz * @param <T> * @return */ public static <T> T parse(@NonNull String json, Class<T> clazz) { T t = null; try { t = mapper.readValue(json, clazz); } catch (Exception e) { log.error(" parse json [{}] to class [{}] error:{{}}", json, clazz.getSimpleName(), e); } return t; } }
調用效果