gpt4 book ai didi

java - 将根元素名称保留在 Jackson 生成的 JSON 中

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:44 25 4
gpt4 key购买 nike

我正在使用 Jackson 1.9.7 从我的 Java 对象生成一些 JSON。

这是我将对象序列化为 JSON 的方法:

public String constructJson(Object object)
throws EvaluationException {
try {

objectMapper.setSerializationConfig(
objectMapper.getSerializationConfig()
.withSerializationInclusion(JsonSerialize.Inclusion.NON_NULL)
.withSerializationInclusion(JsonSerialize.Inclusion.NON_EMPTY)
.with(SerializationConfig.Feature.WRAP_ROOT_VALUE)
);

return objectMapper.writeValueAsString(object);

} catch (IOException e) {
LOGGER.error("Error", e);
throw new EvaluationException("Error", e);
}
}

我正在传递从 XSD 模式生成的 java 对象,但它没有具有 @XmlRootElement 注释。有什么方法可以告诉 Jackson 保留该对象的名称吗?

目前它生成的是:

{"": {
"generatedId": "EA7EB141D9454433B5E24F374BF25118",....

虽然它应该是:

{"theNameOfTheRoot": {
"generatedId": "EA7EB141D9454433B5E24F374BF25118",....

我作为根传递给对象映射器的类如下所示:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "EvaluationType", propOrder = {
"generatedId",
"style",
"status",
"candidate",
"texts",
"evaluationParts"
})
public class EvaluationType {
.....
}

那么也许有一种方法可以告诉 Jackson 从 @XmlType 注释中获取名称?有人知道如何解决这个问题吗?

最佳答案

如果将 @XmlRootElement(name="EvaluationType") 放在类定义的顶部,它应该提供名称。或者您是说由于某种原因您不能将 @XmlRootElement 添加到您的类中?

更新

如果没有可用的 @XmlRootElement,Jackson 2 将使用类名作为 JSON 键。 Jackson 2 需要一组新的 Maven 依赖项,特别是:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.1.3</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.1.2</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.1.3</version>
</dependency>

关于java - 将根元素名称保留在 Jackson 生成的 JSON 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14729547/

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