gpt4 book ai didi

java - 如何禁用 Spring 的 "typeMismatch"异常? - Spring MVC

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:34 26 4
gpt4 key购买 nike

基本上,我希望能够阻止 Spring 检查我的字段是否包含错误数据,而是让我手动处理所有验证和异常。

假设我有一个类:

public class MyClass {

int aNumber;
}

和一个 Controller :

@Controller
public class MyController {

@Autowired
private MyValidator validator;

public MyClass() {}

@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setValidator(validator);
}

@RequestMapping(value="/postsomething", method=RequestMethod.POST)
public ModelAndView onPost(@ModelAttribute("myObject") MyClass myObject, BindingResult result) {

validator.validate(myObject, result);

if (result.hasErrors()) {
return "postsomething";
}

return "redirect:success";
}

最后是 validator :

public class MyValidator implements Validator {

@Override
public void validate(Object target, Errors errors) {

MyClass myObject = (MyClass) target;

if (someCondition) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "aNumber", "error.myclass.anumber.null");
}
}
}

要点是,如果 someCondition 为真,我只希望从我的验证程序中显示一次错误消息。但是,如果我将表单中的端口字段留空,那么无论如何它都会显示 Spring 的类型不匹配错误消息。

我可以禁用 typeMismatch 错误,还是应该以其他方式解决所有这些问题?

最佳答案

简短的回答:将支持对象的成员声明为 String

长答案:typeMismatch 错误发生在绑定(bind)期间和之前 验证。所有用户的数据都表示为 String 值(因为这是 ServletRequest.getParameter() 返回的值)并且 Spring 尝试将 String 值转换为支持对象中的字段类型。在您的示例中,Spring 将尝试将参数 aNumber 的值转换为 int。当您将字段留空时,Spring 会尝试将空字符串转换为 int,当然它会提示类型不匹配。

(这个答案仍然不完整,因为 Spring 也尝试使用不同的转换器,但我相信你已经明白了。)

关于java - 如何禁用 Spring 的 "typeMismatch"异常? - Spring MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34001087/

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