在JAXB中自动添加根元素

时间:2016-09-27 08:26:07

标签: java rest spring-boot jaxb jersey

在泽西岛,我如何自动在JAXB pojo中添加root?

我有我的JAXB pojo

class Product {
   private String name;
   ....
}

默认情况下,生成的json是

{
    "name": "Burton Custom Freestlye 151",
}

我希望它是

{
  "product": {
    "name": "Burton Custom Freestlye 151",
  }
}

注意:我的意思是自动不会创建单独的类只是为了包含另一个pojo。

这应该是序列化/反序列化为JSON。

另外我还有其他JSON不使用root元素。

1 个答案:

答案 0 :(得分:1)

使用Spring Boot,您可以将ObjectMapper配置为Spring bean,并设置Spring Boot以使用映射器。 ObjectMapper自动添加根元素的配置属性是

  

SerializationFeature.WRAP_ROOT_VALUE

默认行为是取类名和小写。如果您想要不同的内容,可以使用@XmlRootElement("newName")@JsonRootName("newName")为课程注释。要创建Spring bean,只需在配置类中添加以下内容

@Bean
public ObjectMapper mapper() {
    final ObjectMapper mapper = new ObjectMapper();
    mapper.configure(SerializationFeature.WRAP_ROOT_NAME, true);
    return mapper;
}

注意我认为这(为ObjectMapper创建一个Spring bean)只能从1.4.0开始提供。如果您使用的是早期版本的Boot,则只需do this

此外,如果您期望带有包装值的传入JSON,您还需要解包它。你可以用

做到这一点
  

DeserializationFeature.UNWRAP_ROOT_VALUE

以与上面相同的方式配置它(传递true)。

更新

(此时不太有用,但可能在将来)

看看source for @JsonRootName,杰克逊似乎一直计划在2.4之后的注释中添加alwaysWrap属性。但我猜他们一直拖延这个。不知道为什么。也许将来它会出现。