我使用的是resteasy 3.0.11版本,jaxb和jackson 2.0作为序列化提供商。我有一个看起来像这样的服务:
@Path("/path")
@IgnoreMediaTypes("application/*+json")
public interface MyService {
@GET
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
@IgnoreMediaTypes("application/*+json")
MyData getData();
}
这是MyData类:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class MyData implements JsonSerializable {
@JsonProperty
private int a;
private int b;
}
JsonSerializable接口:
@JsonAutoDetect(
fieldVisibility = JsonAutoDetect.Visibility.NONE,
getterVisibility = JsonAutoDetect.Visibility.NONE,
setterVisibility = JsonAutoDetect.Visibility.NONE,
isGetterVisibility = JsonAutoDetect.Visibility.NONE,
creatorVisibility = JsonAutoDetect.Visibility.NONE)
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown=true)
public interface JsonSerializable {}
我的问题是,当我使用localhost / path / test调用此服务时,MyData类的b属性也被序列化:
{"a":0,"b":0}
甚至,JsonSerializeble接口的fieldVisibility设置为NONE。我已经尽力而已,但没有成功。对这个问题有任何帮助吗?
答案 0 :(得分:0)
我怀疑,JAXB注释优先于Jackson注释。这取决于Jackson的配置方式(详情请参阅documentation)。
@XmlAccessorType(XmlAccessType.FIELD)
与@JsonAutoDetect(
fieldVisibility = JsonAutoDetect.Visibility.ANY)
基本相同。删除@XmlAccessorType
注释,你应该好好去。