json序列化時忽略值為null的字段2種方式實例
當一個對象里有些屬性值為null 的不想?yún)⑴cjson序列化時,比如打印日志等場景進行序列化,null字段會占用日志長度。 可以采用如下兩種方式:
方法一:JsonInclude.Include.NON_NULL 注解
在類上面增加 @JsonInclude(JsonInclude.Include.NON_NULL)
示例:
//這個是類注解,表示該類實例化的對象里,值為null的字段不參與序列化 @JsonInclude(JsonInclude.Include.NON_NULL) @Data public class Person { private Long id; private String name; } public static void main(String[] args) { Person p1 = new Person(); p1.setId(1L); p1.setName("test1"); System.out.println("p1: " +JSONObject.toJSON(p1)); Person p2 = new Person(); p2.setId(1L); System.out.println("p2: " +JSONObject.toJSON(p2)); }
輸出:
p1: {"name":"test1","id":1}
p2: {"id":1}
方法2:自定義一個ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
自定義一個JsonUtils工具類:
可以解析字符串,array, map等
@Slf4j public class JsonUtils { private static final String EMPTY_JSON = "{}"; private static final String EMPTY_ARRAY_JSON = "[]"; private static final ObjectMapper MAPPER = new ObjectMapper(); static { MAPPER.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); } public static String toJSON(@Nullable Object obj) { if (obj == null) { return null; } try { return MAPPER.writeValueAsString(obj); } catch (JsonProcessingException e) { log.error("toJson error, ", e); throw new BusinessException(e.getMessage()); } } public static <T> T parseObject(@Nullable String json, Class<T> valueType) { if (json == null) { return null; } try { return MAPPER.readValue(json, valueType); } catch (IOException e) { log.error("parse object error, ", e); throw new BusinessException(e.getMessage()); } } public static <E, T extends Collection<E>> T parseArray(String json, Class<? extends Collection> collectionType, Class<E> valueType) { if (StringUtils.isEmpty(json)) { json = EMPTY_ARRAY_JSON; } try { return MAPPER.readValue(json, defaultInstance().constructCollectionType(collectionType, valueType)); } catch (IOException e) { log.error("parseArray error, ", e); throw new BusinessException(e.getMessage()); } } public static <T> List<T> parseArray(String json, Class<T> valueType) { return parseArray(json, List.class, valueType); } /** * */ public static <K, V, T extends Map<K, V>> T parseMap(String json, Class<? extends Map> mapType, Class<K> keyType, Class<V> valueType) { if (StringUtils.isEmpty(json)) { json = EMPTY_JSON; } try { return MAPPER.readValue(json, defaultInstance().constructMapType(mapType, keyType, valueType)); } catch (IOException e) { log.error("parseMap error, ", e); throw new BusinessException(e.getMessage()); } } public static Map<String, Object> parseMap(String string) { return parseMap(string, Map.class, String.class, Object.class); } }
測試
public static void main(String[] args) { Person p1 = new Person(); p1.setId(1L); p1.setName("test1"); System.out.println("p1: " +JsonUtils.toJSON(p1)); Person p2 = new Person(); p2.setId(1L); System.out.println("p2: " +JsonUtils.toJSON(p2)); } //輸出: // p1: {"id":1,"name":"test1"} // p2: {"id":1}
總結
到此這篇關于json序列化時忽略值為null的字段的文章就介紹到這了,更多相關json序列化忽略值為null字段內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MybatisPlus+Postgresql整合的幾個坑及解決
這篇文章主要介紹了MybatisPlus+Postgresql整合的幾個坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03Java數(shù)據(jù)結構中七種排序算法實現(xiàn)詳解
這篇文章主要介紹了Java數(shù)據(jù)結構中七種排序算法的實現(xiàn)方法,排序算法可分為兩大類,比較類排序和非比較類排序,顧名思義可知它們是通過比較來決定元素間的相對次序,需要詳細了解排序算法的朋友可以參考下2024-02-02SpringBoot服務監(jiān)控機制原理解析(面試官常問)
這篇文章主要介紹了SpringBoot服務監(jiān)控機制原理解析(面試官常問),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04Java實現(xiàn)過濾掉map集合中key或value為空的值示例
這篇文章主要介紹了Java實現(xiàn)過濾掉map集合中key或value為空的值,涉及java針對map的簡單遍歷、判斷、移除等相關操作技巧,需要的朋友可以參考下2018-06-06