3

我正在使用 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。有没有办法告诉杰克逊保留那个物体的名字?

目前它产生的是:

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

虽然它应该是:

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

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

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

所以也许有办法告诉杰克逊从@XmlType注释中取名字?有谁知道如何解决这个问题?

4

2 回答 2

3

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

更新

如果没有@XmlRootElement可用的 JSON 键,Jackson 2 将使用类名。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>
于 2013-02-06T13:18:27.493 回答
0

对于 2.6 版使用如下

ObjectMapper objectMapper = new ObjectMapper();
JaxbAnnotationModule module = new JaxbAnnotationModule();
objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE,true);      
objectMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE,true);
于 2015-08-04T10:38:19.270 回答