Spring 表单验证验证数据库插入?
Spring Form Validation validates database insert?
我想使用 Spring Validation with Annotations 来验证我的表单数据。
例如,我有以下对象:
@Entity
@ComponentScan
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@NotEmpty
private String type;
...
}
如您所见,我在 type
字符串上使用了 @NotEmpty
。我只想用它来验证我的表单。它不应该验证数据库插入。
所以当我这样做时:
@RequestMapping(value = "/myForm", method = RequestMethod.POST)
public String categoryPOST(HttpServletRequest request, Model model, @Valid Category category, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "form";
}
return "redirect:/results";
}
它正在按照我希望的方式工作。但是当我必须创建一个虚拟对象时:
Category category = new Category();
然后我对那个空对象执行保存:
this.category_repository.save(category);
我收到错误(只有重要的部分):
Caused by: javax.validation.ConstraintViolationException: Validation failed for classes [my.project.jpa.entity.Category] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='darf nicht leer sein', propertyPath=type, rootBeanClass=class my.project.jpa.entity.Category, messageTemplate='{org.hibernate.validator.constraints.NotEmpty.message}'}
]
这不是我想要的。我想使用注释进行表单验证,但我不希望对数据库操作执行验证。
这有可能吗?
附加信息
我使用以下方法得到了相同的结果:
javax.validation.constraints.NotNull;
注释。
是的,有可能。
第一个选项是对表单对象 (DTO) 和实体使用不同的 类。
第二个选项是配置 Hibernate 并在保存前禁用验证。因为这个问题已经回答过几次了,我会提供他们的链接:
- How do you turn off Hibernate bean validation with JPA 1.0?
- Disabling Hibernate Validation on save/update with Hibernate 3.6.0.Final
- How to disable Hibernate validation in a Spring Boot project
我想使用 Spring Validation with Annotations 来验证我的表单数据。 例如,我有以下对象:
@Entity
@ComponentScan
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@NotEmpty
private String type;
...
}
如您所见,我在 type
字符串上使用了 @NotEmpty
。我只想用它来验证我的表单。它不应该验证数据库插入。
所以当我这样做时:
@RequestMapping(value = "/myForm", method = RequestMethod.POST)
public String categoryPOST(HttpServletRequest request, Model model, @Valid Category category, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "form";
}
return "redirect:/results";
}
它正在按照我希望的方式工作。但是当我必须创建一个虚拟对象时:
Category category = new Category();
然后我对那个空对象执行保存:
this.category_repository.save(category);
我收到错误(只有重要的部分):
Caused by: javax.validation.ConstraintViolationException: Validation failed for classes [my.project.jpa.entity.Category] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='darf nicht leer sein', propertyPath=type, rootBeanClass=class my.project.jpa.entity.Category, messageTemplate='{org.hibernate.validator.constraints.NotEmpty.message}'}
]
这不是我想要的。我想使用注释进行表单验证,但我不希望对数据库操作执行验证。
这有可能吗?
附加信息
我使用以下方法得到了相同的结果:
javax.validation.constraints.NotNull;
注释。
是的,有可能。
第一个选项是对表单对象 (DTO) 和实体使用不同的 类。
第二个选项是配置 Hibernate 并在保存前禁用验证。因为这个问题已经回答过几次了,我会提供他们的链接:
- How do you turn off Hibernate bean validation with JPA 1.0?
- Disabling Hibernate Validation on save/update with Hibernate 3.6.0.Final
- How to disable Hibernate validation in a Spring Boot project