我必须调用REST API(方法PATCH)。在该补丁调用的请求正文中,有两个值“ foo”和“ bar”。 foo和bar指的是Foo和Bar类型的对象(在Java中都是类)。
对于foo,有两种可能性:
但是对于酒吧来说,存在三种可能性:
JSON示例
{
"foo": {}
}
{
"foo": {},
"bar": {}
}
{
"foo": {},
"bar": null
}
{
"bar": {}
}
{
"bar": {}
}
我正在寻找一种使用Jackson来在Java 8中表达这一点的方法。但是我只能实现在JSON 中省略了一个值,或者它为null。
实体类应类似于此:
public class Entity {
private Foo foo;
private Bar bar;
public Foo getFoo() {
return foo;
}
public void setFoo(Foo foo) {
this.foo = foo;
}
public Bar getBar() {
return bar;
}
public void setBar(Bar bar) {
this.bar = bar;
}
}
完成映射的其他地方:
ObjectMapper objectMapper = new ObjectMapper();
try {
Entity e = new Entity();
e.setFoo(new Foo());
System.out.println(objectMapper.writeValueAsString(e));
e.setBar(new Bar());
System.out.println(objectMapper.writeValueAsString(e));
} catch (JsonProcessingException e1) {
e1.printStackTrace();
}
输出看起来像这样
{"foo":{},"bar":null}
{"foo":{},"bar":{}}
如果我添加
@JsonInclude(JsonInclude.Include.NON_ABSENT)
将Entity更改为输出
{"foo":{}}
{"foo":{},"bar":{}}
我是否使用NULL或Optionals都没有关系。只有两种状态。是否设置值。 “未设置”可以 通过Jackson通过JSON表示为null或省略值。我所缺少的是执行任何一种操作的方式:在一种情况下,将其忽略(不存在),而在另一种情况下将其设置为null(有,但没有值)。 如何使用Jackson来用Java表达这一点?有可能还是我不走运?
类似
public class Entity {
private Foo foo;
private Magic<Bar> bar;
...
或通过一些时髦的注释连接的其他布尔
或...!?