Spring Boot验证消息未解决

我无法解决我的验证消息。

我确实MessageSource定义了一个bean,并且正确读取了它的 messages.properties

,因为我也将它用于与一起显示的常规文本th:text="#{some.prop.name},这确实工作得很好。只是验证错误无法正常工作。我确定这是一个愚蠢的错误,我只是忽略了……验证本身运行良好。

约束:

@NotEmpty(message="{validation.mail.notEmpty}")

@Email()

private String mail;

messages.properties:

# Validation

validation.mail.notEmpty=The mail must not be empty!

模板部分:

<span th:if="${#fields.hasErrors('mail')}" th:errors="*{mail}"></span>

显示的文字:

{validation.mail.notEmpty}

我尝试了很多变化,但都没有成功。

@NotEmpty(message="validation.mail.notEmpty")

@NotEmpty(message="#{validation.mail.notEmpty}")

仅显示消息字符串的确切值,不进行解析。

<span th:if="${#fields.hasErrors('mail')}" th:errors="${mail}"></span>

<span th:if="${#fields.hasErrors('mail')}" th:errors="#{mail}"></span>

<span th:if="${#fields.hasErrors('mail')}" th:errors="#{*{mail}}"></span>

<span th:if="${#fields.hasErrors('mail')}" th:errors="#{__*{mail}__}"></span>

会导致错误。


编辑:

调试后,我偶然发现了这一点:

类: org.springframework.context.support.MessageSourceSupport

方法: formatMessage(String msg, Object[] args, Locale locale)

将被称为

formatMessage("{validation.mail.notEmpty}", null, locale /*German Locale*/)

它会遇到 if (messageFormat == INVALID_MESSAGE_FORMAT) {

所以…我的邮件格式不正确。这超出了我的范围/知识。有人知道这意味着什么吗?

回答:

您似乎LocalValidatorFactoryBean在应用程序配置中缺少定义。在下面,您可以找到Application定义两个bean

的类的示例:LocalValidatorFactoryBean并且MessageSource使用messages.properties文件。

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.context.MessageSource;

import org.springframework.context.annotation.Bean;

import org.springframework.context.support.ReloadableResourceBundleMessageSource;

import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;

@SpringBootApplication

public class Application {

@Bean

public MessageSource messageSource() {

ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();

messageSource.setBasename("classpath:messages");

messageSource.setDefaultEncoding("UTF-8");

return messageSource;

}

@Bean

public LocalValidatorFactoryBean validator() {

LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();

bean.setValidationMessageSource(messageSource());

return bean;

}

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

LocalValidatorFactoryBean豆定义您可以使用自定义的验证信息,如:

@NotEmpty(message = "{validation.mail.notEmpty}")

@Email

private String email;

和 :

validation.mail.notEmpty=E-mail cannot be empty!

和Thymeleaf模板文件,具有:

<p th:if="${#fields.hasErrors('email')}" th:errors="*{email}">Name Error</p>

回答:

https://github.com/wololock/stackoverflow-

answers/tree/master/45692179

我已经准备了反映您问题的示例Spring

Boot应用程序。随时克隆它并在本地运行。如果与表单一起发布的值不符合@NotEmpty@Email验证,它将显示翻译的验证消息。

回答:

如果要扩展WebMvcConfigurerAdapter,则必须通过重写getValidator()父类的方法来提供验证器,例如:

import org.springframework.context.MessageSource;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.support.ReloadableResourceBundleMessageSource;

import org.springframework.validation.Validator;

import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;

import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration

@EnableWebMvc

public class WebConfiguration extends WebMvcConfigurerAdapter {

@Bean

public MessageSource messageSource() {

ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();

messageSource.setBasename("classpath:messages");

messageSource.setDefaultEncoding("UTF-8");

return messageSource;

}

@Bean

@Override

public Validator getValidator() {

LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();

bean.setValidationMessageSource(messageSource());

return bean;

}

// other methods...

}

否则,如果您LocalValidatorFactoryBean在其他位置定义bean,它将被覆盖,并且将无效。

希望对您有所帮助。

以上是 Spring Boot验证消息未解决 的全部内容, 来源链接: utcz.com/qa/399234.html

回到顶部