Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JAXB中自动添加根元素_Java_Rest_Spring Boot_Jaxb_Jersey - Fatal编程技术网

Java 在JAXB中自动添加根元素

Java 在JAXB中自动添加根元素,java,rest,spring-boot,jaxb,jersey,Java,Rest,Spring Boot,Jaxb,Jersey,在Jersey,我如何自动在JAXB pojo中添加根目录 我有我的JAXB pojo class Product { private String name; .... } 默认情况下,生成的json是 { "name": "Burton Custom Freestlye 151", } 我希望是这样 { "product": { "name": "Burton Custom Freestlye 151", } } 注意:我所说的automatic并不

在Jersey,我如何自动在JAXB pojo中添加根目录

我有我的JAXB pojo

class Product {
   private String name;
   ....
}
默认情况下,生成的json是

{
    "name": "Burton Custom Freestlye 151",
}
我希望是这样

{
  "product": {
    "name": "Burton Custom Freestlye 151",
  }
}
注意:我所说的automatic并不是创建单独的类来封装另一个pojo

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


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

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

默认行为是采用类名,并将其小写。如果您想要一些不同的东西,可以使用
@XmlRootElement(“newName”)
@JsonRootName(“newName”)
注释该类。要生成Springbean,只需在配置类中添加以下内容

@Bean
public ObjectMapper mapper() {
    final ObjectMapper mapper = new ObjectMapper();
    mapper.configure(SerializationFeature.WRAP_ROOT_NAME, true);
    return mapper;
}
注意,我认为这(为ObjectMapper创建Springbean)仅从1.4.0开始可用。如果您使用的是早期版本的Boot,那么您应该只使用它

另外,如果您希望传入带有包装值的JSON,您还需要将其展开。你可以用它来做

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


更新 (目前不是很有用,但将来可能会有用)


从注释来看,Jackson似乎从2.4开始就计划在注释中添加一个
AlwaysRap
属性。但我猜他们一直在拖延。不知道为什么。也许将来它会出现。

为什么是JAXB?JAXB用于XML而不是JSON,您使用哪种JAXB实现?MOXy?spring boot starter Jersey的默认版本是一个
JAX-RS
实现。你的问题真让人困惑。您想知道的是如何让rest资源使用上一节中提供的格式以JSON格式返回结果,对吗?如果是这样的话,请改进你的问题,因为现在它确实有误导性。我有其他JSON不使用根元素,我如何仅对特定的POJO执行此操作?使用我链接的选项(对于boot<1.4.0)。您可以配置不同的映射器。在
getContext
方法中,您可以确定应该获取根包装器的类型。跟踪所有需要它的类是一项工作,但我认为这可能是你最好的选择。