gpt4 book ai didi

Spring MVC Hibernate 验证器类型不匹配异常

转载 作者:行者123 更新时间:2023-12-02 07:06:06 24 4
gpt4 key购买 nike

我正在使用 Spring MVC 和 Hibernate 验证器 4.2.0。/WEB-INF/classes/ValidationMessages.properties 中的类路径上有一个 ValidationMessages.properties:

typeMismatch.java.lang.Integer=Must specify an integer value.
typeMismatch.int=Invalid number entered
typeMismatch=Invalid type entered

这在 javaconfig 中作为 bean 提供:

@Configuration
@EnableWebMvc
public class WebApplicationConfiguration extends WebMvcConfigurerAdapter {
...

@Bean
public ReloadableResourceBundleMessageSource messageSource() {
ReloadableResourceBundleMessageSource resourceBundleMessageSource = new ReloadableResourceBundleMessageSource();
resourceBundleMessageSource.setBasename("ValidationMessages");
return resourceBundleMessageSource;
}
...

它正在从类路径加载 ValidationMessages.properties。我的 Controller :

@Controller
public class myController {
...

@InitBinder("myForm")
protected void initUserBinder(WebDataBinder binder) {
binder.setValidator(new CustomValidator());
}
...

@ResponseBody
@RequestMapping(value = "/ajax/myRequest", method = RequestMethod.POST)
public CustomResponse ProcessAjaxRequest(
@Valid @ModelAttribute final MyForm myForm,
final BindingResult bindingResult)
throws Exception {

if (bindingResult.hasErrors()) {
return new CustomResponse(bindingResult.getAllErrors());
} else {
..
}
}
...

还有一个自定义验证器:

public class CustomValidator implements Validator {

@Override
public boolean supports(Class c) {
return MyForm.class.equals(c);
}

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

使用我的 CustomValidator 进行验证工作正常(我手动插入错误消息,而不是使用消息源),但是对于绑定(bind) typeMismatch 错误,我遇到了异常:

Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Integer' for property 'myField'; nested exception is java.lang.NumberFormatException: For input string: "A"

而不是 ValidationMessages.properties 中的代码,因此看起来 DataBinder (?) 没有使用我的 messageSource。我想要属性文件中的 typeMismatch 代码而不是异常消息。我也尝试过使用 ResourceBundleMessageSource 而不是 ReloadableResourceBundleMessageSource,但这没有任何区别。有什么想法吗?

最佳答案

如何获取错误消息?这项工作适合您吗?

@Autowired
private MessageSource messageSource;
...

FieldError error = bindingResult.getFieldError("fieldName");
String errorMessage = messageSource.getMessage(error, Locale.getDefault());

关于Spring MVC Hibernate 验证器类型不匹配异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16609089/

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