有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

本地特定错误消息中的java插值

我正在尝试修改现有的Spring Boot应用程序,以支持多语言错误消息。我对该房产的注释做了如下更改:

@Size(min = 2, max = 75, message = "Book.name.Size")
private String name;

我的messages_en.properties看起来像:

Book.name.Size = The name must be between {min} and {max} characters

MessageSource配置如下所示:

@Configuration
public class MessageSourceConfig extends WebMvcConfigurerAdapter {

    @Bean
    public MessageSource messageSource() {

        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:messages");
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setCacheSeconds(600);

        return messageSource;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {

        LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
        localeChangeInterceptor.setParamName("lang");

        return localeChangeInterceptor;
    }

    @Bean
    public LocaleResolver localeResolver() {

        SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
        sessionLocaleResolver.setDefaultLocale(Locale.ENGLISH);

        return sessionLocaleResolver;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        registry.addInterceptor(localeChangeInterceptor());
    }

    @Bean
    public LocalValidatorFactoryBean validator()
    {
        LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
        localValidatorFactoryBean.setValidationMessageSource(messageSource());

        return localValidatorFactoryBean;
    }
}

如果输入的值太小/太大,返回的错误消息不包含插值的最小/最大值,因此用户可以准确地看到:

The name must be between {min} and {max} characters

我尝试更改属性上的注释以包含大括号:

@Size(min = 2, max = 75, message = "{Book.name.Size}")
private String name;

但现在我收到了一个错误:

org.springframework.context.NoSuchMessageException: No message found under code 'The name must be between 2 and 75 characters' for locale 'en'

这一定是配置问题,但我不知道问题出在哪里


共 (1) 个答案

  1. # 1 楼答案

    您必须将以下内容添加到GreetingController

    @Autowired
    private LocalValidatorFactoryBean validator;
    
    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.setValidator(validator);
    }