【问题标题】:Require JSON Field with JAXB需要带有 JAXB 的 JSON 字段
【发布时间】:2013-04-02 01:08:05
【问题描述】:

我有以下。

@XmlRootElement
public class SomeObject {

    private String requiredField;

    @XmlElement(name="address", required=true)
    public String getRequiredField() {
        return requiredField;
    }

    public void setRequiredField(String requiredField) {
        this.requiredField = requiredField;
    }    

}

但是,当相应的 Jersey 资源使用生成此对象所需的 JSON 时,它会成功创建该对象,无论是否带有按要求注释的字段。

使用 Jersey 和 JAXB,或者直接相关的技术,有没有办法确保 requiredField 的值出现在消费的 JSON 中?上面的示例缺少什么?

例子:

我想要的是拒绝如下调用,因为 JSON 正文不包含 requiredField 的值。

curl -i -X POST -H 'content-type:application/json' -d '{}' http://some/uri

我更希望这样的工作。

curl -i -X POST -H 'content-type:application/json' -d '{"requiredField":"Hello, world!"}' http://some/uri

【问题讨论】:

  • 如果您正在寻找以空值而不是作为不存在节点输出的空值,您可能会发现以下有用:blog.bdoughan.com/2012/04/…
  • 我添加了一个更具体的示例。
  • Marc M.,你找到解决办法了吗?
  • @FagnerBrack 我不相信我做到了。我想我刚刚在我的 utils 包中创建了一个验证方法并在资源级别运行它。不像注释之类的声明性那样无缝,但它是资源级别的用途。
  • 我很抱歉这个菜鸟,但你所说的“资源级别”是什么意思?您的意思是只调用方法而不使用任何内置功能?

标签: xml json jaxb annotations jersey


【解决方案1】:

您可以为您的字段设置默认值。

@XmlRootElement
public class SomeObject {

    private String requiredField = "Hello world!"; 

    //...  
}

现在,如果您在运行时不为此字段设置新值,那么在 JSON 中您将看到 "Hello world!" 字符串

【讨论】:

  • 不完全是我需要的。我需要用户为该字段提供一个值,如果没有提供,则不要将该字段设置为某个默认值。不过谢谢,这肯定是一个有趣的选择。
猜你喜欢
  • 2010-10-25
  • 2013-02-12
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 2017-04-06
  • 2016-10-17
  • 2021-10-24
  • 1970-01-01
相关资源
最近更新 更多