将嵌套的json映射到java字段,而不写入容器名称
我有一个rest端点,它返回3级嵌套json,如下所示:将嵌套的json映射到java字段,而不写入容器名称,java,json,spring-boot,groovy,jackson,Java,Json,Spring Boot,Groovy,Jackson,我有一个rest端点,它返回3级嵌套json,如下所示: { "user":{ "departament":{ "departInfo":{ "departName":"String" } } } } 我有一个java/groovy类,没有相同的3个嵌套级别: @JsonIgnorePropertires("ignoreUnknown = true") class User(){ Stri
{
"user":{
"departament":{
"departInfo":{
"departName":"String"
}
}
}
}
我有一个java/groovy类,没有相同的3个嵌套级别:
@JsonIgnorePropertires("ignoreUnknown = true")
class User(){
String departName
}
当我使用restTemplate进行rest调用时:
User response = restTemplate.exchange(url, HttpMethod.GET,
request, User.class)
jackson没有映射字段departName,因为即使使用json ignore属性,它也不在同一嵌套级别。我已使用此代码解决了我的问题:
@JsonIgnorePropertires("ignoreUnknown = true")
class User(){
String departName;
@JsonProperty("department")
private void mapDepartmentName(Map<String,Object department) {
this.departName = ((Map<String,String>)department.get("departInfo")).get("departName");
}
}
这是非常好的工作,但我真的不喜欢它,因为我仍然需要写容器的名称。我能解决这个问题吗?它不一定需要与jackson在一起,而不显式地编写无用和不必要的容器嵌套JSON?
我希望避免更改代码,即使容器的名称发生更改。代码是java/groovy 将JsonPath作为依赖项添加到Maven中:
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.3.0</version>
</dependency>
您只需获取json字符串并使用JsonPath进行处理:
String json = "...";
List<String> departNames = JsonPath.read(json, "$..departName");
String firstDepartName = JsonPath.read(json, "$..departName[0]");
由于这是json树解析和遍历引擎,我强烈怀疑它的性能不如Jackson值得测试的性能,但这为您提供了很多灵活处理json字符串的机会 尝试json路径$..departname确切位置在哪里?在map方法中?你能写一些代码吗?为什么这个标记为[groovy]我看不到groovy位?上面所有的代码都是groovy,如果有,我可以使用groovy json解决方案。对不起,当你说java类没有相同的3个嵌套级别时,我很困惑