gpt4 book ai didi

java - MethodArgumentNotValidException 的 validator 仅处理相同类型的约束

转载 作者:行者123 更新时间:2023-12-01 04:24:36 25 4
gpt4 key购买 nike

我正在尝试根据 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com