1

我无法让自定义错误消息与 Spring 3.2 一起使用。这是我的配置:

配置:

@Configuration
@EnableWebMvc
@EnableJpaRepositories(basePackages = {"com.."})
@EnableTransactionManagement
@ComponentScan(basePackages = {"com.."})
public class Config extends WebMvcConfigurerAdapter {

    @Bean
    public PersistenceExceptionTranslator jpaExceptionTranslator() {
        return new HibernateExceptionTranslator();
    }

    @Bean
    public FactoryBean<EntityManagerFactory> entityManagerFactory(
            DataSource ds, JpaVendorAdapter jva) {
        LocalContainerEntityManagerFactoryBean factoryBean =
                new LocalContainerEntityManagerFactoryBean();
        factoryBean.setPackagesToScan(new String[] { "com.." });
        factoryBean.setDataSource(ds);
        factoryBean.setJpaVendorAdapter(jva);
        factoryBean.afterPropertiesSet();
        return factoryBean;
    }

    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory  emf) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);
        return transactionManager;
    }

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JodaModule());
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        return objectMapper;
    }

    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename("i18n/messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter converter =
                new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(objectMapper());
        converters.add(converter);
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }

}

这是 messages_en_US.properties 文件:

Pattern.userdto.email=Invalid email.
Pattern=Invalid syntax.

用户 DTO 类:

public final class UserDTO {

    @Size(min = MIN_EMAIL_LENGTH, max = MAX_EMAIL_LENGTH)
    @Pattern(regexp = EMAIL_PATTERN)
    private String email;

    ...

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    ...
}

使用 javax.validation.Valid 注解触发验证。

我希望当给定的电子邮件与模式不匹配时,这会打印出“无效的电子邮件”,但我收到了“无效的语法”消息。

4

2 回答 2

1

您需要指定要在@Pattern约束中使用的消息的键:

...
@Pattern(regexp = EMAIL_PATTERN, message = "Pattern.userdto.email")
private String email;
...

否则使用默认键(即“{javax.validation.constraints.Pattern.message}”)。

于 2013-06-11T06:54:32.680 回答
1

将消息密钥更改为:

Pattern.userDTO.email
于 2013-06-11T18:22:09.217 回答