【问题标题】:Null fields in POJO with application/json and BeanParamPOJO 中的空字段,带有 application/json 和 BeanParam
【发布时间】:2016-03-17 18:11:10
【问题描述】:

我在一个控制器类中定义了一个REST服务操作,如图:

@POST
@Consumes({MediaType.APPLICATION_JSON})
@Path("create")
public Response createWidget(@BeanParam Widget widget) {
    ...
}

Widget 是一个 POJO bean 类,即 2 个名为 foobar 的私​​有字段,类型为 String,带有公共 getter 和 setter,以及一个公共无参数构造函数。

POST 请求正文是:

{ "foo": "Some text", "bar": "Some more text" }

并且有标题Content-Type: application/json

在触发此请求时,createWidget 方法获取一个 Widget 对象作为参数,但两个 String 字段都是 null

谁能告诉我要填充这些字段还需要什么?我认为 POJO bean 类中可能需要一些注释。如果内容类型是application/x-www-form-urlencoded,那么我知道字段应该注解@FormParam,但我不确定application/json 内容的注解应该是什么。

非常感谢您的帮助... - 开心

【问题讨论】:

  • 消息正文参数应该有 no 注释。如果您删除 @BeanParam,并收到类似“No MessageBodreadter for type Wdiget and application/json”之类的错误,那么您需要一个 JSON 提供程序
  • 谢谢,@peeskillet。那行得通。因为找到了 JacksonJaxbJsonProvider,所以我不需要做任何其他事情。如果您将评论转换为答案,我会接受。

标签: json rest jax-rs json-deserialization


【解决方案1】:

一般情况下,除了一些表单注解外,body参数不需要任何注解。这实际上是 JAX=RS 将如何确定它主体。所以你只能有 一个 非注释参数,因为你只能有一个主体。因此,只需更改您所拥有的内容(只需删除 @BeanParam。只要您有 JSON 提供程序,它就可以工作。

@POST
@Consumes({MediaType.APPLICATION_JSON})
@Path("create")
public Response createWidget(Widget widget) {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-22
    • 2020-11-28
    • 1970-01-01
    • 2015-01-28
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多