邮递员发送的 Json 对象收到空成员

Posted

技术标签:

【中文标题】邮递员发送的 Json 对象收到空成员【英文标题】:Json object sent by postman received with null members 【发布时间】:2016-12-28 00:14:26 【问题描述】:

这是这个问题的后续问题:

sending nested json object using postman

我正在尝试使用 Postman 将 Json 对象发送到 Jersey 网络服务。

我是这样做的:

在泽西一侧:

@Path("/testMethod")
@POST
@UnitOfWork
public short testMethod(@NotNull @BeanParam Test test)
 ... 

测试类是一个简单的类:

public class Test

    public String field;

    public Test()
    

    

在邮递员方面,我正在发送一条 POST 消息,其中 Body 设置为 raw,内容类型设置为 Json(application/json)。身体本身是:


 "field" : "12"

发送这个请求时,接收到的参数中的field为空……这是为什么呢?

【问题讨论】:

【参考方案1】:

如果您只想将 json 数据映射到对象,则只需删除 @BeanParam 即可正常工作。

但是,如果您想使用@BeanParam 功能,您应该从第一个参数中删除该注释,并添加带有@BeanParam 注释的第二个参数:

@Path("/testMethod")
@POST
@UnitOfWork
public short testMethod(@NotNull Test test, @BeanParam ExtraTest extraTest)
 ... 

然后使用额外的字段映射实现您的 ExtraTest 类:

public class ExtraTest

    @HeaderParam("Accept")
    public String acceptHeader;

    /* 
    your other header params, path params and so on...
    ...
    */
 

@BeanParam 是允许您轻松访问附加请求信息(标头字段、查询参数等)的功能。它不能与您的 json 数据对象映射混合。

更多信息:

https://abhirockzz.wordpress.com/2014/07/21/new-in-jax-rs-2-0-beanparam-annotation/

https://jersey.java.net/apidocs/2.22/jersey/javax/ws/rs/BeanParam.html

【讨论】:

什么时候应该接受没有 BeanParam 注释的 Json 对象,什么时候应该使用它? 检查我编辑的答案。 @BeanParam 是一种机制,可让您轻松访问其他请求信息(标头、查询参数等)。

以上是关于邮递员发送的 Json 对象收到空成员的主要内容,如果未能解决你的问题,请参考以下文章

复制 json 文件时出现 Amazon Redshift 错误 - JSONPath 格式无效:成员不是对象

Scala 错误:对象 XML 不是 Apache Spark 上包 org.json 的成员

成员变量和成员函数分开存储

Newton JSON 如何将对象序列化为空括号?

vue前端收到的数据与后台发送的数据不一致是啥原因?

JSON在JObject返回类型中返回空数组