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

JSR-303自定义验证程序数据库

易流觞
2023-03-14

我有一个可以创建和编辑组的应用程序。每个团体都有一个独特的头衔。当有人试图创建新组时,我会检查是否有具有该标题的组,如果有,则验证失败。问题是,当有人试图编辑组而不更改标题时,根据我的自定义验证,有一个组具有该标题(有人正在编辑的标题),而我的验证失败,因此用户无法保存该组。所以我想问一下,是否有人能解决这个问题。非常感谢您的回答!

我的班级

public class UserGroupData implements Serializable {

private Long id;
@NotNull(message = "{NotNull.userGroupData.title}")
@Size(max = 20, message = "{Size.userGroupData.title}")
@UserGroupTitle(message = "{Unique.userGroupData.title}")
private String title;

我的验证器接口

    @Documented
@Constraint(validatedBy = UserGroupTitleValidator.class)
@Target( { ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface UserGroupTitle {


    String message();

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

我的验证器

public class UserGroupTitleValidator implements ConstraintValidator<UserGroupTitle, String> {
    @Autowired
    UserGroupRepo userGroupRepo;

    @Override
    public void initialize(UserGroupTitle paramA) {
    }

    @Override
    public boolean isValid(String UserGroupTitle, ConstraintValidatorContext ctx) {
        UserGroup userGroup = userGroupRepo.findOneByTitle(UserGroupTitle);

        if(userGroup!=null){
            return false;
        }
        return true;
    }
}

共有1个答案

齐弘业
2023-03-14

假设您正在使用JPA(至少您用它标记了问题),并且问题发生在实体作为与JPA的Bean验证集成的一部分进行验证时,您可以配置每个JPA生命周期类型中哪些组得到验证。要实现这一点,您需要为您的UserGroup验证分配一个组:

public class UserGroupData implements Serializable {

   private Long id;

   @NotNull(message = "{NotNull.userGroupData.title}")
   @Size(max = 20, message = "{Size.userGroupData.title}")
   @UserGroupTitle(message = "{Unique.userGroupData.title}", groups = AtInsertOnly.class)
   private String title;
}

public interface AtInsertOnly {
}

接下来,您需要告诉JPA在验证期间针对哪些组。默认情况下,只有default组是目标。但是通过javax。坚持不懈。验证。组预持久化javax。坚持不懈验证。组预更新javax。坚持不懈验证。组预删除您可以配置每个生命周期事件类型验证哪些组。在您的情况下,可以设置javax。坚持不懈验证。组预持久化javax。验证。违约

这些属性应该添加到持久性中。xml

 类似资料:
  • 我有一个Spring Boot应用程序,它包含一个用户类——所有字段都有标准的JSR-303注释(@NotNull、@Size等),验证工作正常。 但是,当我向User添加自定义验证时,我无法将依赖项注入自定义验证器: @uniqueUsername注释声明为: 注释字段: 以及验证程序的用法: 问题是UserRepository在UniqueUsernameValidator中没有自动配置。字段

  • 我试图让Kotlin在spring-data-rest项目上使用JSR303验证。 给定以下数据类声明: 提前感谢您的帮助!

  • 我的bean中有两个字段 当字段key=“A”,“value”应该跟在其他“key”的特定Regex后面时,它可以是任何内容。 如何根据键定义此值验证。

  • 我正在用Spring和Thymeleaf填表: MyForm如下所示: 正如您所看到的,我做了一个自定义注释,它应该检查输入值是否可以解析为: 现在在我的Controller类中,我正在执行以下操作: 但是,当试图将放入文本字段以测试验证时,获取: 下面是我读到的示例,并希望用自定义验证器进行扩展:http://viralpatel.net/blogs/spring-mvc-hashmap-for

  • 问题内容: 我有一个具有很多用JSR-303验证注释注释的字段的bean。现在有一个新的要求,其中一个字段是强制性的,但仅在某些条件下才是强制性的。 我环顾四周,找到了我需要的验证组。 这就是我现在所拥有的: 但是,当我在单元测试中运行此验证时: 事实证明,所有非组批注的验证都将被忽略,而我仅收到1次违规。 我可以理解这种行为,但是我想知道是否有一种方法可以使该组也包括所有未注释的参数。如果没有,

  • 我使用Spring 3.2.2与Primeface 4.0和Hibernate 4.2。我在我的实体上有JSR303验证注释,并且我配置了Spring来在服务层验证它们——这很好。 但是我希望在调用服务之前启动JSF验证,但事实并非如此。我所做的所有研究都表明,我只需在类路径中添加一个验证程序,JSF2就会自动应用。 我已将建议的JAR添加到我的类路径中: 完整的依赖关系树可以在https://g