我正在构建一个必须部署在Websphere Application Server v8.5(WAS8.5)中的Rest服务。 WAS8.5使用Jackson 1.6.2作为JSON映射器。支持以下注释:
org.codehaus.jackson.annotate.JsonAnySetter
org.codehaus.jackson.annotate.JsonAutoDetect
org.codehaus.jackson.annotate.JsonClass
org.codehaus.jackson.annotate.JsonContentClass
org.codehaus.jackson.annotate.JsonCreator
org.codehaus.jackson.annotate.JsonGetter
org.codehaus.jackson.annotate.JsonIgnore
org.codehaus.jackson.annotate.JsonIgnoreProperties
org.codehaus.jackson.annotate.JsonKeyClass
org.codehaus.jackson.annotate.JsonProperty
org.codehaus.jackson.annotate.JsonPropertyOrder
org.codehaus.jackson.annotate.JsonSetter
org.codehaus.jackson.annotate.JsonSubTypes
org.codehaus.jackson.annotate.JsonSubTypes.Type
org.codehaus.jackson.annotate.JsonTypeInfo
org.codehaus.jackson.annotate.JsonTypeName
org.codehaus.jackson.annotate.JsonValue
org.codehaus.jackson.annotate.JsonWriteNullProperties
org.codehaus.jackson.map.annotate.JsonCachable
org.codehaus.jackson.map.annotate.JsonDeserialize
org.codehaus.jackson.map.annotate.JsonSerialize
org.codehaus.jackson.map.annotate.JsonTypeIdResolver
org.codehaus.jackson.map.annotate.JsonTypeResolver
org.codehaus.jackson.map.annotate.JsonView
在我的代码中,我想使用JsonView注释。下一个代码示例解释了我想要完成的任务。
POJO:
public class SomeObject {
@JsonView(SomeObjectView.Details.class)
private String somePropOne;
private String somePropTwo;
...
}
查看界面:
public interface SomeObjectView {
public interface Details{}
}
休息控制器:
@Stateless
@Path("/someobjects")
public class SomeObjectRestController {
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{id}")
@JsonView(SomeObjectView.Details.class)
public SomeObject getPolis(@PathParam("id") String id) {
SomeObject someObj = ... // Service call
return someObj;
}
}
在上面的例子中,Rest Controller中的@JsonView似乎没有效果(两个属性都显示在JSON响应中)。可能是Websphere的JAX-RS实现对Rest端点上的注释没有任何作用。
有什么方法可以让它发挥作用吗?
答案 0 :(得分:0)
第二个属性序列化,因为它是"无视图"属性:
"默认情况下,所有没有显式视图定义的属性都包含在序列化中。 "
您可以通过以下方式进行更改:
objectMapper.configure(SerializationConfig.Feature.DEFAULT_VIEW_INCLUSION, false);
不要忘记注释您不需要的属性(我使用静态类):
class SomeObjectView {
static class Details{}
static class UnWantedDetails{}
}
public class SomeObject {
@JsonView(SomeObjectView.Details.class)
private String somePropOne;
@JsonView(SomeObjectView.UnWantedDetails.class)
private String somePropTwo;
...
}