Java 自定义JSON到POJO映射器 上下文
我尝试使用RestTemplate GET请求接收数据,服务器以JSON格式返回我需要的数据,响应包含我需要的所有数据,但它也包含大量多余的数据,我不想将包含多余数据的多余字段添加到POJO以自动映射它 问题是 我是否可以制作一个自定义映射器,只将某些JSON字段映射到我的java类?非常感谢您的帮助 一些代码示例 之前,我将JSON直接映射到我的POJO,如下所示:Java 自定义JSON到POJO映射器 上下文,java,json,resttemplate,pojo,Java,Json,Resttemplate,Pojo,我尝试使用RestTemplate GET请求接收数据,服务器以JSON格式返回我需要的数据,响应包含我需要的所有数据,但它也包含大量多余的数据,我不想将包含多余数据的多余字段添加到POJO以自动映射它 问题是 我是否可以制作一个自定义映射器,只将某些JSON字段映射到我的java类?非常感谢您的帮助 一些代码示例 之前,我将JSON直接映射到我的POJO,如下所示: ResponseEntity<Foo> response = new RestTemplate(requestFac
ResponseEntity<Foo> response = new RestTemplate(requestFactory)
.exchange(uri, HttpMethod.GET, entity, new ParameterizedTypeReference<Foo>(){});
[{
"idReadable": "idR",
"customFields": [{
"projectCustomField": {
"field": {
"name": "Name",
"$type": "type"
},
"$type": "type"
},
"value": {
"name": "Value",
"$type": "type"
},
"$type": "type"
}],
"id": "id",
"$type": "type"
}]
ArrayNode nodeList = jp.getCodec().readTree(jp);
HashMap<String, String> fields = new HashMap<>();
List<Issue> foos = new ArrayList<>();
for (JsonNode node : nodeList) {
String id = node.get("id").asText();
issues.add(new Foo(id));
}
我只需要两个“name”值
解决方案
正如@mostneededrabbit在评论中建议的那样,解决方案是为RestTemplate编写自定义反序列化程序扩展StdDeserializer,其中的RestTemplate如下所示:
ResponseEntity<Foo> response = new RestTemplate(requestFactory)
.exchange(uri, HttpMethod.GET, entity, new ParameterizedTypeReference<Foo>(){});
[{
"idReadable": "idR",
"customFields": [{
"projectCustomField": {
"field": {
"name": "Name",
"$type": "type"
},
"$type": "type"
},
"value": {
"name": "Value",
"$type": "type"
},
"$type": "type"
}],
"id": "id",
"$type": "type"
}]
ArrayNode nodeList = jp.getCodec().readTree(jp);
HashMap<String, String> fields = new HashMap<>();
List<Issue> foos = new ArrayList<>();
for (JsonNode node : nodeList) {
String id = node.get("id").asText();
issues.add(new Foo(id));
}
您可以通过将以下内容放在类的顶部来忽略不需要的字段:
@JsonIgnoreProperties(ignoreUnknown = true)
然后只保留类中所需的字段。由于复杂的响应嵌套系统,我不确定是否可以通过注释实现这一点,但不管怎样,我很好奇是否有办法实现某种类型的映射器?添加了我试图转换的json,也许这有助于理解任务better@mmmetafool遍历JSON是您正在寻找的解决方案类型吗?或者一些更“开箱即用”的东西?我想如果我不需要多次处理响应,那么遍历就可以了,如果我可以在RestTemplate获取数据的同时处理它,那就太好了。我可以配置我自己的反序列化程序吗?@mmmetafool也许这会有帮助-