Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaREST服务中验证XML输入NOTNULL属性?_Java_Rest_Jakarta Ee - Fatal编程技术网

如何在JavaREST服务中验证XML输入NOTNULL属性?

如何在JavaREST服务中验证XML输入NOTNULL属性?,java,rest,jakarta-ee,Java,Rest,Jakarta Ee,我在托米的领导下运行这项服务 模型非常简单: @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Card { @XmlElement(required = true, nillable = false) private String cardNumber; public Card() { //no-op } public Card(final Stri

我在托米的领导下运行这项服务

模型非常简单:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Card {

    @XmlElement(required = true, nillable = false)
    private String cardNumber;

    public Card() {
        //no-op
    }

    public Card(final String s) {
        cardNumber = s;
    }

    public String getCardNumber() {
        return cardNumber;
    }

    public void setCardNumber(String cardNumber) {
        this.cardNumber = cardNumber;
    }
}
我遵循这个例子

服务也非常简单,如:

@Consumes(APPLICATION_XML)
@Produces(APPLICATION_XML)
public class MyService {
    @POST 
    @Path("status")
    public String queryStatus(Card card) {
        // do something 
    }
}
如果我的输入格式错误,它将有一个适当的异常。但它似乎无法验证空卡号或空卡号

例如,当我

"<card></card>" 
“”

“”
(使用空字符串)时,该服务仍将运行,“cardNumber”属性为null或空

嗯,我可以在二传中做点什么来抛出一个异常。但是如果我在属性上添加注释,我希望JavaEE能够自动处理这种情况

那么我在这里错过了什么? 谢谢你的提示

使用Bean验证()JavaEE提供了一种验证对象的标准方法。它还与JAX-RS集成

因此,您可以在卡类中使用类似于
@NotNull
的注释。在您的服务中,只需说您想要一张
@有效的


这里可以找到一个示例:

包javax.validation.constraints包含bean验证注释。其中一个注释是javax.pattern.constraints.pattern,它有助于根据用户定义的正则表达式约束字段的值。您可能需要测试这是否有帮助。请注意,我自己还没有测试过。唉……我真的认为你给了我一个正确的答案,但它仍然没有启动验证。我从这个页面添加了依赖项,我将ValidateRequest头添加到我的服务中,将Validate添加到输入中,并将NotNull大小(min=4)添加到属性中。根本不工作。事实上,我在卡构造函数或setter中设置了断点,而不是hit。谁在创建此对象?我的请求可以直接进入服务方法。链接中的文章解释说,jax rs 2附带了自动验证。如果您使用的是jax rs 1,那么需要添加依赖项。在这篇文章中,它们被标记为“提供”,这对我来说是不正确的,你需要将它们打包到你的战争中。根据文档,您还需要一个初始化器:啊,我意识到Tome实际上是EE 6.0,我们使用的是CXF,所以我不能使用这些示例所使用的(restfy)。您有没有关于如何在TomEE中使用CXF进行bean验证的技巧?我现在正在做我自己的研究……我没有任何resteasy的经验,但从文档来看,它似乎与jax的其他框架/实现兼容。Tome邮件列表中也讨论了这个主题:
"<card><cardNumber> </cardNumber></card>"