gpt4 book ai didi

java - Spring反序列化带有JSONObject字段的对象

转载 作者:行者123 更新时间:2023-11-30 06:43:33 25 4
gpt4 key购买 nike

我在 spring 中反序列化包含 JSON 字段的对象时遇到问题。我有一个 DataTable 数据结构,它同时具有 String 字段和一个应包含 JSONObject 的字段:

public class DataTable {

private String identifier;
private String version;
private JSONObject content;

//getters and setters
}

我希望能够保留此对象并在以后检索它。当我将这样的 DataTable 对象发布到我的 Controller 并稍后尝试检索它时,无论我发布的内容如何,​​我的 content 字段将为空:

{
"identifier": "id1",
"version": "0.0.1",
"content": {
"empty": true
}
}

jackson 似乎无法正确反序列化 JSONObject 类型字段,而是将其留空。我怎样才能让它正确地反序列化字段?

最佳答案

jackson 有 jackson-datatype-json-org模块,它允许我们将 json.org 对象与 POJO 组合或反序列化为 json.org 对象作为顶级对象。

<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-json-org</artifactId>
<version>${jackson2.version}</version>
</dependency>

这是一个测试(不要忘记注册 JsonOrgModule)。

public class JsonOrgJacksonTest {

private final String json =
"{" +
" \"id\": \"one\"," +
" \"content\": {" +
" \"foo\": \"bar\"," +
" \"baz\": \"blah\"" +
" }" +
"}";

@Test
public void testJsonOrg() throws Exception {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JsonOrgModule());

Model model = mapper.readValue(json, Model.class);

assertThat(model.getId()).isEqualTo("one");
assertThat(model.getContent().get("foo")).isEqualTo("bar");
assertThat(model.getContent().get("baz")).isEqualTo("blah");
}

public static class Model {
private String id;
private JSONObject content;

public String getId() { return id; }
public void setId(String id) { this.id = id; }

public JSONObject getContent() { return content; }
public void setContent(JSONObject content) { this.content = content; }
}
}

关于java - Spring反序列化带有JSONObject字段的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52000996/

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