我需要在响应对象中隐藏模型类中的一些字段。 I tried to follow this SO answer 但没有运气。
当某个字段有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;
}
任何有用的答案都将受到高度赞赏..谢谢
[更新] @JsonIgnore与org.codehaus.jackson一起使用:jackson-core-asl:1.8.6但是使用com.fasterxml.jackson.core失败:jackson-annotations:2.7.2 ..任何想法为什么? ??
答案 0 :(得分:0)
将@JsonIgnore Annotation添加到getter方法中。
或尝试在课程级别添加@JsonIgnoreProperties(value={"name"})
,如果这是您的选项
如果你的类路径中有Proper Jackson Library(组:'com.fasterxml.jackson.core',名字:'jackson-core'),你场上的@JsonIgnore就可以了。只要你拥有的getter方法是一个标准的getter,你就不必用@JsonIgnore来注释getter。
答案 1 :(得分:-1)
如果您只想根据字段注释序列化和反序列化对象,则应将Jackson 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注释在类级别配置。
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
public class APIInfoDTO {
// ...
}