我有一个POJO,它有一个字段:
public class Media {
private Asset asset;
}
当将一个json响应解析到这个资产POJO中时,一切工作都很完美。但是,与此资产附带的关键字有一个细微的区别。它可以是:
@JsonProperty("cover_asset")
或
@JsonProperty("asset")
有没有一种方法来注释POJO来识别这个案例并反序列化到相同的字段中。两者不可能出现在相同的答复中。
更简洁地说,我建议为此使用两个单独的@JsonSetter注释。这里有一个工作示例。这意味着您的Java类将只有一个getter方法可用于属性,而不是两个。您还可以将不希望公开给媒体客户端的setter设置为私有的,并以特殊的方式处理其中一个json键。
import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.databind.ObjectMapper;
@SuppressWarnings("unused")
public class Media {
private Asset asset;
@JsonGetter("asset")
public Asset getAsset() {
return asset;
}
@JsonSetter("asset")
public void setAsset(Asset asset) {
this.asset = asset;
}
@JsonSetter("cover_asset")
private void setMediaAsset(Asset asset) {
if (this.asset == null) {
setAsset(asset);
}
}
private static class Asset {
@JsonProperty("foo")
private String foo;
}
public static void main(String[] args) throws Exception {
String withAsset = "{'asset': {'foo':'bar'}}";
String withCoverAsset = "{'cover_asset': {'foo':'bar'}}";
ObjectMapper mapper = new ObjectMapper();
Media mediaFromAsset = mapper.readValue(withAsset.replace('\'','"'), Media.class);
Media mediaFromCoverAsset = mapper.readValue(withCoverAsset.replace('\'','"'), Media.class);
System.out.println(mediaFromAsset.asset.foo.equals(mediaFromCoverAsset.asset.foo));
}
}
那么,由于您只关心反序列化,所以2.9
中引入的@JSONALIAS
非常适合这种情况。您可以这样做:
@JsonAlias({"cover_asset", "asset"})
private Asset asset;
@jsonalias
文档:
可用于定义属性的一个或多个替代名称的批注,在反序列化过程中作为正式名称的替代名称接受。别名信息也会在POJO内省过程中公开,但在始终使用主名称的序列化过程中不起作用。
注意:请确保更新所有相关依赖项(注释
、核心
、数据绑定
)(如果您正在使用这些依赖项)。只更新annotations
而不更新其他人会给我带来运行时错误。
问题内容: 我有一个POJO,其中包含一个字段: 将json响应解析到此资产POJO时,一切工作正常。但是此资产随附的密钥略有不同。可以是: 要么 有没有一种方法可以注释POJO以识别这种情况并反序列化到同一字段中。他们不可能出现在相同的响应中。 问题答案: 好吧,因为只有反序列化才是您关心的问题,所以引入in十分适合这种情况。您可以执行以下操作: docs: 可用于定义属性的一个或多个替代名称的
鉴于以下类: 和以下设置: 当我尝试解析ServiceA和ServiceB时,它们都得到一个具有相同URL的HttpClient。 我如何更改DI中的注册,使每个服务都得到正确的HttpClient注入? TIA /Søren
以下是我目前的尝试: 我一直在思考如何动态地向列(mpg、cyl、disp)添加(1,2,3)。提前谢了。
我在ES7.8中创建了一个日期格式为“YYYY-MM-DD”的索引。 然而,当我点击地图上的“基线”字段时,在Filter上传递的实际值是yyyy-mm-dd00:00:00.000z。 有没有人可以建议一下,我怎样才能在过滤器中得到正确的日期格式“YYYY-MM-DD”? 多谢了。 下面是请求中的示例文档 “命中”:[{“_index”:“program_b”,“_type”:“_doc”,“_
问题内容: 我有两张桌子和。 第一台具有与第二表有田,, 我想要一个帐户进行多少次子请求以及他进行了多少次抓取的计数(基于,如果该帐户中填充了他的) 在一个查询中 输出: 问题答案: 使用类似 诀窍是使用表两次:和,每次由不同的字段联接。 关于效率的注意事项:我不确定,但是我相信这个解决方案比子查询解决方案要快,尽管没有对其进行测试(至少不会慢一些)。只要有可能,我总是更喜欢子查询。
我们正计划将Graphql用于编排(For e.用户界面客户端调用图形ql服务,该服务转到多个Restendpoint并返回结果)。这里的问题是,从一个Restendpoint,我们必须根据客户端请求的字段传递不同类型的查询参数。 我们使用Spring Bootgraphql和graphql java工具库来初始化graphql 我的代码解析用户字段并调用restendpoint,以便在一次调用(