gpt4 book ai didi

java - 将 JSON 字符串与新的 POJO 对象匹配

转载 作者:行者123 更新时间:2023-12-02 12:41:17 24 4
gpt4 key购买 nike

我正在使用 Spring RestTemplate 与提供的传递 JSON 的 REST 服务进行通信。为了映射响应,我使用 Jaxon,但我很乐意切换到任何其他有效的东西。

我想创建一个 POJO,其中包含所传递数据的子内容,但结构不同。

归结为:

来源:{ "a": "val_a", "b": {"c": "val_c", "d": "val_d"}}

@JsonIgnoreProperties(ignoreUnknown = true)
class Foo {
// should contains the content of `"a": "val_a"`
// but contains null
private Baa;

// getter and setter
}

@JsonIgnoreProperties(ignoreUnknown = true)
class Baa {
private String a;

// getter and setter
}


// This should be the operation that is done internally by Spring when calling
// ResponseEntity<Foo>response = restTemplate.exchange(url, HttpMethod.GET, entity, Foo.class);
// response.getBody();
private Foo read(String s) {
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

return mapper.readValue(s, Foo.class);
}

反序列化的结果是一个空的 Baa 对象。实际的 JSON 和 POJO 对象结构更复杂,但这就是总结。

任何实现这一目标的技术都会受到欢迎。我想到的唯一可能性是反序列化提供的结构中的 JSON 并编写一个 Converter 类来生成所需的对象,但我希望避免这种情况。

----- 更新/澄清 ------问题是,属性 a 应该映射到 Baa 类中,该类位于 Foo 中,但在所提供的 JSON 对象的根路径中提供(这是正确的术语吗?)

最佳答案

public class Foo {

private String a;
private B b;

// getters setters

}

public class B {

private String c;
private String d;

// getters setters

}

应该在没有附加注释的情况下与您的代码进行映射。如果您有一个带有重要示例的特定代码,那么请完整地发布您的实际代码。

更新您的澄清:不,正如我在评论中所说,您不能使用注释来做到这一点。您必须编写自定义反序列化器。看看这个答案:Jackson: is it possible to include property of parent object into nested object?

关于java - 将 JSON 字符串与新的 POJO 对象匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44918563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com