我正在使用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",....
我作为root传递给对象映射器的类看起来像这样:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "EvaluationType", propOrder = {
"generatedId",
"style",
"status",
"candidate",
"texts",
"evaluationParts"
})
public class EvaluationType {
.....
}
所以也许有办法告诉杰克逊从@XmlType
注释中取名?有谁知道如何解决这个问题?
答案 0 :(得分:3)
如果您在类定义的顶部放置@XmlRootElement(name="EvaluationType")
,则应提供名称。或者您是说由于某种原因无法向您的班级添加@XmlRootElement
?
<强>更新强>
如果没有@XmlRootElement
,杰克逊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>
答案 1 :(得分: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);