[英]Form pojo to parse JSON
我的json看起来像这样:
{
"bid": "181.57",
"ask": "181.58",
"volume": {
"item1": "543.21",
"item2": "123.45",
"timestamp": 1487903100000
},
"last": "181.58"
}
我正在尝试使用spring restTemplate将其读入pojo。 我当前的pojo是这样的:
import com.fasterxml.jackson.annotation.JsonProperty;
public class DataModel {
private String last;
private Volume volume;
private String ask;
private String bid;
// Getter and setters
}
class Volume
{
private String timestamp;
@JsonProperty
private String item1;
@JsonProperty
private String item2;
// Gettersand setters
}
问题是,根据我要查询的实体,json的“ item1”和“ item2”可以更改为“ item5”和“ item6”。 如果我的变量分别命名为item1和item2,则会得到空值。 如何保留变量item1和item2的通用名称,并且仍然能够正确读取通用变量中的值? 有没有任何注释可以帮助您?
我相信这就是您从Baeldung教程中寻找的内容 :
3.3。 @JsonAnySetter
@JsonAnySetter使您可以灵活地将Map用作标准属性。 反序列化时,JSON的属性将仅添加到地图中。
让我们看看它是如何工作的–我们将使用@JsonAnySetter反序列化实体ExtendableBean:
public class ExtendableBean {
public String name;
private Map<String, String> properties;
@JsonAnySetter
public void add(String key, String value) {
properties.put(key, value);
}
}
这是我们需要反序列化的JSON:
{
"name":"My bean",
"attr2":"val2",
"attr1":"val1"
}
这是所有这些如何结合在一起的方式:
@Test
public void whenDeserializingUsingJsonAnySetter_thenCorrect()
throws IOException {
String json
= "{\"name\":\"My bean\",\"attr2\":\"val2\",\"attr1\":\"val1\"}";
ExtendableBean bean = new ObjectMapper()
.readerFor(ExtendableBean.class)
.readValue(json);
assertEquals("My bean", bean.name);
assertEquals("val2", bean.getProperties().get("attr2"));
}
在您的情况下,您只需在映射中查询对您进行的任何查询所期望的String值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.