@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"})で指定したフィールドは、シーケンス化および逆シーケンス化されません.
変換されたツールクラスを添付
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の使用をダウンロードします