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