如何在rest服务中不使用@XmlRootElement获取java对象的请求对象

如何在rest服务中不使用@XmlRootElement获取java对象的请求对象,java,jax-rs,cxf,jackson-databind,Java,Jax Rs,Cxf,Jackson Databind,我正在尝试使用ApacheCxf和Jackson数据绑定生成rest服务。这里我不想使用@XmlRootElement注释。当我尝试下面的代码时,请求对象就像一个空对象 这是我的服务接口 @POST @Path("/getusers/") @Consumes("application/json") @Produces("application/json") public List<UserDetails> getusers(UserDetails userDetails) throw

我正在尝试使用ApacheCxf和Jackson数据绑定生成rest服务。这里我不想使用@XmlRootElement注释。当我尝试下面的代码时,请求对象就像一个空对象

这是我的服务接口

@POST
@Path("/getusers/")
@Consumes("application/json")
@Produces("application/json")
public List<UserDetails> getusers(UserDetails userDetails) throws ServiceException;
Json对象看起来像

{
    "id" : "102",
    "username" : "scott"
}
我得到请求对象的空指针异常

如何访问请求对象
注意:我在这里使用Jackson数据绑定

您的JSON包含
用户名
,而成员名为
用户名
。而且,
id
userId
是不同的

您有三种选择:

  • 更改
    UserDetails
    成员的名称以匹配JSON对象中的字段
  • 更改JSON对象的名称以匹配
    UserDetails
    的成员名称
  • 使用
    @JsonProperty
    将JSON对象名配置为绑定到
    UserDetails
    成员

感谢您的帮助,第三个选项对我非常有效。如果我传递JSON对象,如{“userName”:“Sathish”,“userId”:“1”},我得到了响应,但实际上我想使用{“UserDetails”:{“userName”:“Sathish”,“userId”:“1”}当我使用它的时候,我得到的异常是:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:Unrecognized字段“UserDetails”(class com.restServicesPOC.models.UserDetails),没有标记为可忽略的(2个已知属性:“userName”,“userId”)。是的,但是当邮差发送请求时,我得到异常。原因:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“UserDetails”(class com.restServicesPOC.models.UserDetails),未标记为可忽略(两个已知属性:“userName”,“userId”])
{
    "id" : "102",
    "username" : "scott"
}