Java JAX-RS JAXB未使用@XmlRootElement名称

Java JAX-RS JAXB未使用@XmlRootElement名称,java,json,jaxb,jackson,jax-rs,Java,Json,Jaxb,Jackson,Jax Rs,我正在用JAX-RS和JAXB开发一个restful应用程序。我想将以下实体作为JSON发送到我的客户端: @XmlRootElement(name=“user”) @XmlAccessorType(XmlAccessType.FIELD) 实现可序列化的公共类UserDTO { 私有静态最终长serialVersionUID=1L; 私人长id; 私有字符串用户名; 私有字符串名; 私有字符串lastname; //吸气剂和塞特 } my WebService中的方法定义如下: @POST

我正在用JAX-RS和JAXB开发一个restful应用程序。我想将以下实体作为JSON发送到我的客户端:

@XmlRootElement(name=“user”)
@XmlAccessorType(XmlAccessType.FIELD)
实现可序列化的公共类UserDTO
{
私有静态最终长serialVersionUID=1L;
私人长id;
私有字符串用户名;
私有字符串名;
私有字符串lastname;
//吸气剂和塞特
}
my WebService中的方法定义如下:

@POST
@路径(“用户/{id}”)
@产生({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
登录的公共用户帐户(@PathParam(“id”)长id)
{
UserAccountDTO userAccount=loadUserAccount(id);
返回用户帐户;
}
第一个问题是,根节点不是通过JSON发送的。因此,我添加了以下类:

@Provider
@产生(MediaType.APPLICATION_JSON)
公共类SkedFlexContextResolver实现ContextResolver
{
私有对象映射器对象映射器;
公共SkedFlexContextResolver()引发异常
{
this.objectMapper=new objectMapper().configure(SerializationFeature.WRAP_ROOT_值,true);
}
@凌驾
公共对象映射器getContext(类objectType)
{
返回对象映射器;
}
}
现在,根节点与数据一起发送。对于XML,一切正常(根节点等于
@XmlRootElement
的名称)。请参阅以下XML响应:


10
管理
管理员
但对于JSON,根节点是POJO的类名:

{
“UserAccountDTO”:
{
“id”:10,
“用户名”:“管理员”,
“firstname”:“管理员”,
“lastname”:空
}
}
为什么XML和JSON的输出不同?要在
@XmlRootElement
-注释中获得指定的名称,我需要更改什么?更改
.configure(SerializationFeature.WRAP\u ROOT\u VALUE,true)
。配置(SerializationFeature.WRAP\u ROOT\u VALUE,false)
应该会有所帮助

根据:

可以使根值包装在单个属性JSON对象中的功能,其中键作为“根名称”


我必须像这样将Jaxb模块注册到xml映射器,否则
@XmlRootElement(name=“myname”)
就是igonerd

JaxbAnnotationModule module = new JaxbAnnotationModule();
xmlMapper.registerModule(module);

为什么要启用
WRAP\u ROOT\u VALUE
?找到答案了吗?这里也有同样的问题。如果我将其更改为
.configure(SerializationFeature.WRAP\u ROOT\u VALUE,false),则Jackson包装器似乎会忽略名称属性。
响应数据中缺少根节点。我的问题中提到的JSON很好,只是它不代表
@XmlRootElement
@Develman中给出的名称哦,我误解了你。要使用jaxb注释,您应该注册jaxb模块。是你干的吗?参见“用法”