Java 在JAXB中自动添加根元素
在Jersey,我如何自动在JAXB pojo中添加根目录 我有我的JAXB pojoJava 在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并不
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
方法中,您可以确定应该获取根包装器的类型。跟踪所有需要它的类是一项工作,但我认为这可能是你最好的选择。