当前位置: 首页 > 知识库问答 >
问题:

使用javax。验证以验证带有选项的bean

后树
2023-03-14

我正在利用JAXB实现一个SOAP服务的内存API网关。其中一个模式元素是“choice”,choice块中有几个元素。

我试图在客户机名称空间中镜像生成的JAXB类,因此对于这个“选择”场景,我有一个具有多个属性的bean类,其中只有一个属性是非null的。

我试图使用javax中的@NotNull注释。验证,以及验证工厂和验证程序。然而,一个“选择”的场景让这变得有点复杂。我猜这将需要一个自定义ConstraintValidator,以及一个引用自定义ConstraintValidator的自定义注释。

例如,这里有一些类似于我的结构的假代码:

public class InquireRandomInformationRequest {
    @NotNull(message ="subscriberSelector cannot be null")
    @Valid
    private SubscriberSelector   subscriberSelector;  // required
    private SelectorMode         mode;                // optional
 ...
}

public class SubscriberSelector {
    // Choice 1
    private String                    billingAccountNumber;             // \d{8,9,12,13}; required
    private MarketInfo                billingMarket;                    // optional

    // Choice 2
    private String                    subscriberNumber;                 // \d{10}; required
    private ValidationCriteria        validationCriteria;               // optional
    private BillingAccountInformation billingAccountInformation;        // optional
    private MemoProductType           memoProductType;                  // optional

    // Choice 3
    private String                    unifiedBillingAccountNumber;      // [0-9A-Za-z]{13}; required
...
}

我知道我需要“subscriberSelector”属性上的@Valid注释,以便验证器验证子对象。过去,我不太确定我需要做什么来处理选择问题。

为了符合我的例子,我需要“billingAcCountNumber”、“subberNumber”或“unifiedBillingAcCountNumber”中的一个非空(尽管我可以妥协,只取特定序列中的第一个非空属性)。在每个“选择组”中,其他属性是可选的,但是如果选择了特定的选择组,另一个属性可能是“必需的”(换句话说,选择器属性是非空的)。

我查阅了Hibernate验证器文档,但我不确定如何将其应用于这种情况。

如果我定义了一个自定义注释和一个自定义ConstraintValidator,注释引用在哪里?在类(比如“SubscriberSelector”)或“SubscriberSelector”属性上(在我看来,前者更符合逻辑)。

共有1个答案

阎阳
2023-03-14

可以根据需要定义类或属性的约束。

通常,约束放置在属性上,但是,在您提到的情况下,由于多个属性是相互关联的,所以您应该将约束放置在类级别。

看见https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-在我们的文档中声明bean约束。

 类似资料:
  • 我试图使用swagger来记录我的Restapi,并且取得了一些成功,但是在受限资源参数方面,我遇到了一堵墙。我正在使用JBoss RESTEasy与Hibernate验证器提供程序和Jackson 2.x注释的POJO。我遇到的问题是,当遇到@DecimalMin/@DecimalMax注释时,我得到一个 似乎swagger正在尝试使用较新版本的javax.validation.constrai

  • 问题内容: 嗨,我正在插入一些日期做我的桌子。由于某些原因,我不得不禁用约束。约束与索引相关联。我使用了以下代码行: 并且my_constraint处于禁用状态。不,我想启用此约束,但是在调用此行之后: 我收到一个错误: ORA-02299:无法验证(USER.my_constraint)-找到重复的密钥 问题答案: 您不能具有带有唯一索引的非唯一值。但是,您可以具有带有由非唯一索引强制执行的唯一

  • 我对Spring靴有疑问。如何对Spring转换器进行验证?我试图从javax使用ConstraintValidator,但它在转换器之后运行。

  • 假设我有以下课程: 是否可以通过“MyProduct”类验证“code”属性?比如:

  • 我有一个使用javax注释的jax-rs项目(

  • 首先,我是Vaadin7的新手。当我发现BeanFieldGroup.class时,我正在尝试一些vaadin演示。正如我所看到的,这个类将一个字段绑定到一个bean属性。在bean中,使用验证约束注释对属性进行注释(JSR303)。在本例中,我的pom.xml包含hibernate验证器依赖项: 我创建了validationmessage.properties文件,并在其中放了一些消息(带有匈牙