@JsonIgnorePropertiesエンティティの変換時にjsonに存在しないフィールドを無視
3054 ワード
開発時にこのような状況に遭遇し、ドッキングして発行されたjsonのフォーマットが不確定で、ここの不確定はjsonの中のフィールドが不確定で、従来はgsonを採用して実体とjsonの変換を行っていたが、長い間探していたが、gsonの中でこの状況を解決する方法が見つからなかった.
くだらないことは言わないで、この方法は最終的にjacksonを使って解決します.
解決策:
json変換されたエンティティークラス注記@JsonIgnoreProperties(ignoreUnknown=true)は、クラスレベルの注記であることに注意してください.
@JsonIgnore注記は、一部のフィールドを無視するために使用されます.FieldメソッドまたはGetterメソッドで使用できます.Setterメソッドで使用する場合、Filed効果と同じです.この注記は、POJOが存在するフィールドが無視される場合にのみ使用でき、現在のニーズを満たすことはできません.
@JsonIgnoreProperties(ignoreUnknown=true)この注釈をクラスに書くと、クラスに存在しないフィールドは無視され、現在のニーズを満たすことができます.この注記では、無視するフィールドも指定できます.使用方法は次のとおりです.
@JsonIgnoreProperties({"internalId","secretKey"})で指定したフィールドは、シーケンス化および逆シーケンス化されません.
変換されたツールクラスを添付
jarパッケージここでjsonpropertiesの使用をダウンロードします
くだらないことは言わないで、この方法は最終的にjacksonを使って解決します.
解決策:
json変換されたエンティティークラス注記@JsonIgnoreProperties(ignoreUnknown=true)は、クラスレベルの注記であることに注意してください.
@JsonIgnore注記は、一部のフィールドを無視するために使用されます.FieldメソッドまたはGetterメソッドで使用できます.Setterメソッドで使用する場合、Filed効果と同じです.この注記は、POJOが存在するフィールドが無視される場合にのみ使用でき、現在のニーズを満たすことはできません.
@JsonIgnoreProperties(ignoreUnknown=true)この注釈をクラスに書くと、クラスに存在しないフィールドは無視され、現在のニーズを満たすことができます.この注記では、無視するフィールドも指定できます.使用方法は次のとおりです.
@JsonIgnoreProperties({"internalId","secretKey"})で指定したフィールドは、シーケンス化および逆シーケンス化されません.
変換されたツールクラスを添付
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;
/**
* @Description:
* @author :******| [email protected]
* @date :2017 6 8 10:32:04
*/
@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); //$NON-NLS-1$
} catch (JsonMappingException e) {
log.error("encode(Object)", e); //$NON-NLS-1$
} catch (IOException e) {
log.error("encode(Object)", e); //$NON-NLS-1$
}
return null;
}
/**
* json string
*
* @param json
* @param valueType
* @return
*/
public static T decode(String json, Class valueType) {
try {
return objectMapper.readValue(json, valueType);
} catch (JsonParseException e) {
log.error("decode(String, Class)", e);
} catch (JsonMappingException e) {
log.error("decode(String, Class)", e);
} catch (IOException e) {
log.error("decode(String, Class)", e);
}
return null;
}
}
jarパッケージここでjsonpropertiesの使用をダウンロードします