2016-10-05 32 views
0

我需要在響應對象中隱藏模型類中的一些字段。 I tried to follow this SO answer 但沒有運氣。如何隱藏傑克遜和@JsonIgnore映射到JSON的對象的某些字段失敗

當有一個字段的getter和setter,那麼@JsonIgnore註釋似乎沒有工作。有關說明,請參閱以下代碼段。

@ApiModel(description = "") 
public class APIInfoDTO { 

    private String id = null; 

    @JsonIgnore //this field will not be hidden when getters and setters are defined.. 
    private String name = null; 


    private String status = null; 

    @JsonIgnore // this "info" field is hidden since there are no getters         and setters for this field 
    private String info = "adncusdvshbdvsbvhdb"; 

    /** 
    **/ 
    @ApiModelProperty(value = "") 
    @JsonProperty("id") 
    public String getId() { 
    return id; 
    } 
    public void setId(String id) { 
    this.id = id; 
    } 


    /** 
    **/ 
    @ApiModelProperty(value = "") 
    @JsonProperty("name") 
    public String getName() { 
    return name; 
    } 
    public void setName(String name) { 
    this.name = name; 
    } 


    /** 
    **/ 


@ApiModelProperty(value = "") 
    @JsonIgnore 
    public String getDescription() { 
    return description; 
    } 
    @JsonProperty("description") 
    public void setDescription(String description) { 
    this.description = description; 
    } 

此外此爲對象映射

public static APIInfoDTO fromAPIToInfoDTO(API api) { 
    APIInfoDTO apiInfoDTO = new APIInfoDTO(); 
    apiInfoDTO.setDescription(api.getDescription()); 
    apiInfoDTO.setContext(api.getContext()); 
    apiInfoDTO.setId(api.getUUID()); 
    APIIdentifier apiId = api.getId(); 
    apiInfoDTO.setName(apiId.getApiName()); 
    apiInfoDTO.setVersion(apiId.getVersion()); 
    apiInfoDTO.setProvider(apiId.getProviderName()); 
    apiInfoDTO.setStatus(api.getStatus().toString()); 
    String providerName = api.getId().getProviderName(); 
    apiInfoDTO.setProvider(APIUtil.replaceEmailDomainBack(providerName)); 
    return apiInfoDTO; 
} 

任何有用的答案將高度讚賞的代碼片段..由於

[UPDATE]的@JsonIgnore可與org.codehaus.jackson :jackson-core-asl:1.8.6但失敗com.fasterxml.jackson.core:jackson-annotations:2.7.2 ..任何想法爲什麼?

+1

jackson-core-asl的等價物是com.fasterxml.jackson.core:jackson-core,只需嘗試使用此庫即可。 –

回答

0

將@JsonIgnore註釋也添加到getter方法中。

或者嘗試在Class級別添加@JsonIgnoreProperties(value={"name"}),如果這是一個選項,

UPDATE

如果你在你的類路徑正確傑克遜庫(組:「com.fasterxml.jackson.core」, name:'jackson-core'),@JsonIgnore在你的領域將工作得很好;只要你擁有的getter方法是一個標準的getter,你就不必用@JsonIgnore來註釋getter。

+1

不,它不起作用..我更新了Q,我將@JsonIgnore應用於吸氣但仍不起作用 – Infamous

+0

您的getName()用@JsonProperty(「name」)註釋。你嘗試刪除它,並添加@JsonIgnore來代替。這對我的目的是在春季啓動應用 –

+0

老兄我需要保持名稱完好,但放棄信息字段,我已經嘗試過,但那並不如此 – Infamous

-1

如果你想序列化和反序列化僅基於域的註釋你的對象,傑克遜ObjectMapper應該被配置爲忽略getter和setter方法:

ObjectMapper mapper = new ObjectMapper(); 
mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker() 
       .withFieldVisibility(JsonAutoDetect.Visibility.ANY) 
       .withGetterVisibility(JsonAutoDetect.Visibility.NONE) 
       .withSetterVisibility(JsonAutoDetect.Visibility.NONE)); 

ObjectMapper mapper = new ObjectMapper(); 
mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE); 
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); 

它也可以請使用@JsonAutoDetect批註在Class級別進行配置。

@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) 
public class APIInfoDTO { 
    // ... 
}