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
注释,你应该可以开始了。
我使用的是 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
注释,你应该可以开始了。