如何在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>"