Jackson 序列化了一个私有字段并关闭了字段自动检测

Jackson serializes a private field with field autodection off

我使用的是 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 class:

@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 class 的 b 属性 也被序列化:

{"a":0,"b":0}

甚至,JsonSerializeble 接口的 fieldVisibility 设置为 NONE。已经尽我所能但没有成功。对这个问题有帮助吗?

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

@XmlAccessorType(XmlAccessType.FIELD)@JsonAutoDetect( fieldVisibility = JsonAutoDetect.Visibility.ANY)基本相同。删除 @XmlAccessorType 注释,你应该可以开始了。