我有一个 pojo :
@JsonIgnoreProperties(ignoreUnknown = true)
public class Item
{
String name;
Long baseId;
@JsonIgnore
String status;
}
我将此Java对象用于 GET , POST 和 PUT api调用。我已经使用了 @JsonIgnore 注释来避免序列化(因此它不会为 PUT 和 POST 请求进行序列化,但我得到 GET 请求)。现在我需要将baseId序列化为 POST 请求,而不是 PUT 请求。请建议我解决方案。
答案 0 :(得分:0)
您可以考虑使用the Jackson Json views。基本上,您使用视图类型替换Jackson视图注释上的@JsonIgnore
注释,并根据上下文启用它。以下是普通对象映射器的示例:
public class JacksonView {
public static interface View1 {
}
public static interface View2 {
}
public static class Bean {
@JsonView(View1.class)
public final String field1;
@JsonView(View2.class)
public final String field2;
public final String field3;
public Bean(String field1, String field2, String field3) {
this.field1 = field1;
this.field2 = field2;
this.field3 = field3;
}
}
public static void main(String[] args) throws JsonProcessingException {
Bean bean = new Bean("a", "b", "c");
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper
.writer()
.withView(View2.class)
.writeValueAsString(bean));
}
}
输出:
{"field2":"b","field3":"c"}
要使其在JAX-RS中工作,您应该通过按照here所述注释HTTP方法资源来启用特定视图。例如:
@GET
@JsonView(View1.class)
public Bean doGet() {...}
@POST
@JsonView(View2.class)
public void doPost(Bean bean) {...}