春季-如何从属性文件中获取本地化消息,而其中的bindingResult错误?
作者:互联网
嗨,我有一些Ajax表单,在这里我使用异步POST将数据发送到服务器…
如果BindingResult出现错误,我想在输入字段后的视图中显示一条消息,以解释该错误,因此这是我控制器中的方法:
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public Map<String, String> create(@Valid MyClass myClass, BindingResult bindingResult, Model uiModel,
HttpServletRequest httpServletRequest, HttpServletResponse response, Locale locale) {
if (bindingResult.hasErrors()) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
Map<String, String> errorFields = new HashMap<String, String>();
for(FieldError fieldError : bindingResult.getFieldErrors()){
errorFields.put(fieldError.getField(), fieldError.getDefaultMessage());
}
return errorFields;
}
uiModel.asMap().clear();
myService.create(personale);
return null;
}
它可以工作,但是fieldError.getDefaultMessage()返回英文消息,但是我想返回本地化消息.
我知道我可以这样做:
@NotNull(message="{myMessage}")
private Field field;
但是我不会为每个字段指定本地化消息,也许我可以使用message.properties文件?
可能吗??
谢谢!
编辑
我读的是:another question about my problem,但我不能从消息中得到…
解决方法:
我遇到了同样的问题,可以这样解决:
>在src(mybasename_locale.properties)下定义属性消息
>将这些元素包括在配置文件(dispatcher-servlet.xml)中,以便正确初始化与Spring相关的类l18n
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>mybasename</value>
</property>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale">
<value>es</value>
</property>
>在控制器中,获取对ResourceBundleMessageSource bean的引用.
@Autowired
private ResourceBundleMessageSource mensajes;
>然后,您可以通过getMessage方法getMessage(MessageSourceResolvable arg0,Locale arg1)获得错误消息.
@RequestMapping(path = "/login", method=RequestMethod.POST)
@ResponseBody
public ResponseEntity<Validacion> login(@Valid @RequestBody LoginUsuario login_usuario, BindingResult result) {
if (result.hasErrors())
{
System.out.println("HAY ERRORES");
System.out.println(mensajes.getMessage(result.getFieldError(), LocaleContextHolder.getLocale()));
}
标签:validation,spring-data,binding,spring,spring-mvc 来源: https://codeday.me/bug/20191121/2050630.html