- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试根据 bean 上设置的约束来验证我的表单。我使用的Spring-MVC版本是3.2.4。问题是默认的 Spring validator 不会验证所有约束;仅限相同类型的。
我有以下 Controller 代码:
@Controller
@SessionAttributes()
public class FormSubmitController {
@RequestMapping(value = "/saveForm", method = RequestMethod.POST)
@ResponseBody
public ModelMap saveForm(@Valid @RequestBody Form form, HttpSession session) {
session.setAttribute("form", form);
ModelMap map = new ModelMap();
map.addAttribute("hasErrors", false);
return map;
}
}
以及以下 bean:
public class Form implements IForm, Serializable {
@NotNull(message = "Category should not be empty")
protected String category;
@NotNull(message = "Sub-Category should not be empty")
protected String subCategory;
@Size(min=0, message="Firstname should not be empty")
protected String firstName;
@Size(min=0, message="Lastname should not be empty")
protected String lastName;
@Pattern(regexp="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\\d\\d$", message="Date of birth should be in dd-mm-jjjj format")
protected String dateOfBirth;
//getters and setters
}
MethodArgumentNotValidException 的处理程序如下所示:
@ControllerAdvice
public class FormExceptionController {
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ModelMap handleMethodArgumentNotValidException(MethodArgumentNotValidException error) {
List<FieldError> errors = error.getBindingResult().getFieldErrors();
ModelMap map = new ModelMap();
ModelMap errorMap = new ModelMap();
map.addAttribute("hasErrors", true);
for (FieldError fieldError : errors) {
errorMap.addAttribute(fieldError.getField(), fieldError.getDefaultMessage());
}
map.addAttribute("bindingErrors", errorMap);
return map;
}
}
因此,空表单会导致前两条错误消息。填写的表单的前两个属性导致第三条和第四条错误消息。
只有当我对 bean 上的所有属性使用相同的约束类型(即 NotNull)时,它才会返回所有错误消息。
这里可能出了什么问题?
最佳答案
@Size 的 validator 没有任何问题和 @Pattern默认情况下接受 null 为有效。所以你实际上需要两个注释(@NotNull 和 @Pattern/@Size)。这些注释仅触发对非 null 值的验证,这些验证并不意味着 null
值无效,而这正是 @NotNull
的用途。
这是假设您正在使用 hibernate-vaildator (因为这是开箱即用的支持 validator )。
关于java - MethodArgumentNotValidException 的 validator 仅处理相同类型的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18613027/
我的实体类在其中一个字段上使用 hibernate 的 @NotNull 进行注释。我正在捕获 @ExceptionHelper 中的异常。我的问题是我想访问无效字段的值,以便我可以将其添加到记录器中
我试图获得与在 Controller 的对象参数中使用@Valid 时相同的结果。当对象无效时,我的具有 @RestControllerAdvice 的 ExceptionHandlerControl
我的 Controller 如下所示: @RequestMapping(value = "/cars/{types}", method = RequestMethod.PUT, hea
我正在使用 javax.validation.Size 注释来执行字符串大小验证。 @Data public class EventRequestBean { @Size( max = 40
我有以下@ControllerAdvice: @ControllerAdvice public class ExceptionHandlingController { @ExceptionHa
如何从 MethodArgumentNotValidException 中删除过多的信息并仅保留所需的 “默认消息” ?? 我正在尝试验证注释 - @NotNull、@NotBlank 和 @NotE
我正在尝试根据 bean 上设置的约束来验证我的表单。我使用的Spring-MVC版本是3.2.4。问题是默认的 Spring validator 不会验证所有约束;仅限相同类型的。 我有以下 Con
当我在 javax.validation 中使用 @Valid 注释验证 bean 时,对于某些对象,我收到 ConstraintViolationException ,对于某些对象,我收到 Cons
我正在使用 spring MVC 测试:在我的测试用例中,我传递了一个无效的 Bar 对象(年龄为零)。正在抛出 MethodArgumentNotValidException,但它嵌套在 Neste
我正在使用 spring boot,并且我有一个带有方法的 RestController addBook(@Validated @RequestBody BookDto bookDto) BookDt
我想将@Valid 注释与@RequestBody 注释一起使用,并在我自己的方法中处理错误,该方法使用@ExceptionHandler 注释进行注释。我希望始终返回 ReponseEntity 的
我有一个带有一些验证的简单 Spring Rest Controller 。我的理解是验证失败会抛出 MethodArgumentNotValidException。但是,我的代码反而抛出 BindE
我有一个 Spring Controller ,它使用 hibernate validator 验证传入的请求。 当请求无效时,MethodArgumentNotValidException 被 va
我正在使用 Spring 在 Kotlin 中制作简单的应用程序,但我遇到了验证问题。 我有这个实体类: @Entity @Table(name = "category") data class Ca
我使用的是 Spring Boot v2.2.10 和 Spring v5.2.9。我创建了一个带有 @Valid @RequestBody 注释的 Rest Controller 。验证工作正常(当
我使用的是 Spring Boot v2.2.10 和 Spring v5.2.9。我创建了一个带有 @Valid @RequestBody 注释的 Rest Controller 。验证工作正常(当
我知道 Exception 是所有异常的父级,但我认为当您为特定异常类设置 @ExceptionHandler 时,它应该处理该特定异常。 也许您可以指出我在以下代码中遗漏的内容,以便 MethodA
我正在尝试使用 @ControllerAdvice 处理 MethodArgumentNotValidException,如下所示: @ControllerAdvice public class Re
我是一名优秀的程序员,十分优秀!