開發時遇見這么一個情況,對接放發出的json格式不確定,這里的不確定是json中的字段不確定,以往都是采用gson進行實體和json的轉換,但是找了挺長時間,還是沒找到gson中可以解決這個情況的辦法,博友們有知道的,請告知一二,跪謝。
廢話不多說,這種辦法最終使用jackson解決。
解決辦法:
json轉換成的實體類加注解@JsonIgnoreProperties(ignoreUnknown = true),注意這是類級別的注解。
@JsonIgnore注解用來忽略某些字段,可以用在Field或者Getter方法上,用在Setter方法時,和Filed效果一樣。這個注解只能用在POJO存在的字段要忽略的情況,不能滿足現在需要的情況。
@JsonIgnoreProperties(ignoreUnknown = true),將這個注解寫在類上之后,就會忽略類中不存在的字段,可以滿足當前的需要。這個注解還可以指定要忽略的字段。使用方法如下:
@JsonIgnoreProperties({ "internalId", "secretKey" })
指定的字段不會被序列化和反序列化。
附上一個轉換的工具類
?
[java]?
package?com.*******.****.drp.util;??import?java.io.IOException;????import?org.codehaus.jackson.JsonGenerationException;??import?org.codehaus.jackson.JsonParseException;??import?org.codehaus.jackson.JsonParser;??import?org.codehaus.jackson.map.DeserializationConfig;??import?org.codehaus.jackson.map.JsonMappingException;??import?org.codehaus.jackson.map.ObjectMapper;????import?lombok.extern.slf4j.Slf4j;??@Slf4j??public?class?JacksonUtil?{??????private?final?static?ObjectMapper?objectMapper?=?new?ObjectMapper();????????static?{??????????objectMapper.configure(JsonParser.Feature.ALLOW_COMMENTS,?true);??????????objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES,?true);??????????objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES,?true);??????????objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS,?true);??????????objectMapper.configure(JsonParser.Feature.INTERN_FIELD_NAMES,?true);??????????objectMapper.configure(JsonParser.Feature.CANONICALIZE_FIELD_NAMES,?true);??????????objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,?false);??????}????????public?static?String?encode(Object?obj)?{??????????try?{??????????????return?objectMapper.writeValueAsString(obj);??????????}?catch?(JsonGenerationException?e)?{??????????????log.error("encode(Object)",?e);?????????}?catch?(JsonMappingException?e)?{??????????????log.error("encode(Object)",?e);?????????}?catch?(IOException?e)?{??????????????log.error("encode(Object)",?e);?????????}??????????return?null;??????}????????????public?static?<T>?T?decode(String?json,?Class<T>?valueType)?{??????????try?{??????????????return?objectMapper.readValue(json,?valueType);??????????}?catch?(JsonParseException?e)?{??????????????log.error("decode(String,?Class<T>)",?e);??????????}?catch?(JsonMappingException?e)?{??????????????log.error("decode(String,?Class<T>)",?e);??????????}?catch?(IOException?e)?{??????????????log.error("decode(String,?Class<T>)",?e);??????????}??????????return?null;??????}????}??
轉載于:https://www.cnblogs.com/zhengwuchao/p/8125906.html
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的@JsonIgnoreProperties转换实体时忽略json中不存在的字段的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。