杰克逊序列化一个私人领域,关闭现场自动裁剪

时间:2015-07-23 08:13:37

标签: java serialization jackson resteasy

我使用的是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。我已经尽力而已,但没有成功。对这个问题有任何帮助吗?

1 个答案:

答案 0 :(得分:0)

我怀疑,JAXB注释优先于Jackson注释。这取决于Jackson的配置方式(详情请参阅documentation)。

@XmlAccessorType(XmlAccessType.FIELD)@JsonAutoDetect( fieldVisibility = JsonAutoDetect.Visibility.ANY)基本相同。删除@XmlAccessorType注释,你应该好好去。