gpt4 book ai didi

java - 将自定义验证错误获取到 BindingResult 中

转载 作者:行者123 更新时间:2023-12-02 10:05:48 26 4
gpt4 key购买 nike

我正在尝试从我的 Spring Controller 中删除重复代码,特别是 - 消除从许多函数开始时执行 validator.validate(form, bindingResult) 的需要。

我有一些类具有相应的 validator 类,这些类实现了 Spring 的 validator 接口(interface)。我四处寻找,试图找到答案,但很难找到真正匹配的答案。

带有注释属性的人员表单类片段

public class Person {

@Size(min=1, message="Name missing")
private String name;
@Size(min=1, message="Age missing")
private String age;

.... getters and setters etc.

人员 validator 类

@Component
public class PersonValidator implements Validator {

@Override
public boolean supports(Class<?> clazz) {
return Person.class.isAssignableFrom(clazz);
}

@Override
public void validate(Object target, Errors errors) {
errors.reject("No sir!");
}
}

理想情况下,我希望能够包含 BindingResult 中包含的所有错误,包括来自 validator 类的错误。因此,当我使用 @Validated 注释时,我的 BindingResult 完全填充了来自简单注释和自定义 validator 的所有错误。

期望的结果

@RequestMapping(value="/save", method=RequestMethod.POST)

public @ResponseBody String save(@Validated @RequestBody Person personForm, BindingResult bindingResult, HttpServletRequest request)
{

bindingResult.getAllErrors(); <-- fully pop with annotation and custom validator errors

而不是:

@RequestMapping(value="/save", method=RequestMethod.POST)

public @ResponseBody String save(@Validated @RequestBody Person personForm, BindingResult bindingResult, HttpServletRequest request)
{

personValidator.validate(person, bindingResult) <-- Populate bindingResult with customer validator errors, if any

bindingResult.getAllErrors();

有人可以分享一些巧妙的例子来解决这个问题吗?

谢谢!

最佳答案

您需要将 validator 添加到数据绑定(bind)器才能使多个 validator 工作。在您的代码中添加 @InitBinder方法并将 PersonValidator 添加到 WebDataBinder .

@InitBinder("personForm")
public void initBinder(WebDataBinder wdb) {
wdb.addValidators(personValidator);
}

将 validator 绑定(bind)到 personForm 模型对象。

这将配置一个全局规则,该 validator 应用于所有绑定(bind)/转换。如果您想将此限制为某个模型,您可以在 @InitBinder 中指定模型的名称。

@InitBinder
public void initBinder(WebDataBinder wdb) {
wdb.addValidators(personValidator);
}

关于java - 将自定义验证错误获取到 BindingResult 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55342576/

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