我正在创建一个简单的Spring REST应用程序,下面是我的Spring配置类;
@Configuration
@EnableWebMvc
@ComponentScan( basePackages = "com.example.spring" )
public class AppConfig {
@Bean
public ReloadableResourceBundleMessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:/messages");
return messageSource;
}
}
这就是我在控制器类中所做的;
@RequestMapping(value = "/create", method = RequestMethod.POST)
public ResponseEntity<Map<String, String>> createEmployee(@Valid @RequestBody EmployeeModel employeeModel, BindingResult result) {
if (result.hasErrors()) {
System.out.println("Errors: " + result.getAllErrors());
Map<String, String> response = new HashMap<>();
response.put("status", "failure");
return new ResponseEntity<>(response, HttpStatus.OK);
}
employeeService.createEmployee(employeeModel);
Map<String, String> response = new HashMap<>();
response.put("status", "success");
return new ResponseEntity<>(response, HttpStatus.OK);
}
我已经在EmployeeModel中注释了我的姓名字段,如下所示;
@NotEmpty
@Column(name = "name")
private String name;
这是我的messages.properties文件,在src/main/资源文件夹中。
NotEmpty.employeeModel.name = Employee name is required.
但我无法读取此错误消息,我只收到@NotEmpty的默认消息。
我甚至尝试了以下配置;
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("classpath:/messages");
return messageSource;
}
请帮我拿这个!
您需要告诉验证器
使用您的MessageSource
。
@Bean
public javax.validation.Validator validator() {
final LocalValidatorFactoryBean factory = new LocalValidatorFactoryBean();
factory.setValidationMessageSource(messageSource());
return factory;
}
@Bean
public ReloadableResourceBundleMessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:/messages");
return messageSource;
}
并在您的模型上指定消息键:
@NotEmpty(message = "{NotEmpty.employeeModel.name}")
private String name;
如果仍然打开,可能会有所帮助。在类似的情况下,我明确使用插值器解决了这个问题:
<!-- Messagesource for locales -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<util:list>
<value>classpath:locales/messages/validation</value>
</util:list>
</property>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
<bean id="resourceBundleMessageInterpolator"
class="org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator">
<constructor-arg index="0">
<bean class="org.springframework.validation.beanvalidation.MessageSourceResourceBundleLocator">
<constructor-arg index="0" ref="messageSource"/>
</bean>
</constructor-arg>
</bean>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="messageInterpolator" ref="resourceBundleMessageInterpolator"/>
</bean>
<mvc:annotation-driven validator="validator" />
与其他线程中的建议相反,假设自动注入通过:
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource" ref="messageSource"/>
</bean>
基于以上内容,我还通过使用括号在验证属性文件中使用占位符:即:
@NotNull(message = "{message.notnull}")
此外,以下线程提示对我来说也是必须的:
为什么使用Hibernate验证器替换Spring消息插值参数不起作用?如何在Spring中使用注释验证,并从属性文件中获取错误消息?
嗯,可能有点晚了,但这对我来说绝对有效。
尝试为此更改您的MessageSource
配置:
java prettyprint-override">@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasenames("classpath:/messages");
messageSource.setUseCodeAsDefaultMessage(false);
messageSource.setCacheSeconds((int) TimeUnit.HOURS.toSeconds(1));
messageSource.setFallbackToSystemLocale(false);
return messageSource;
}
您的LocalValidatorFactoryBean
应该与您已经定义的相同。
@Bean
public LocalValidatorFactoryBean validator() {
final LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
localValidatorFactoryBean.setValidationMessageSource(messageSource());
return localValidatorFactoryBean;
}
我使用Spring 5.0.1进行了测试。最终
和Hibernate Validator 5.4.2。最终
版本。
我有一个简单的登录模型类,几乎没有数据注释验证 View是一个部分View,如下所示: 我相信我已经做了验证消息显示所需的所有事情,但它没有,客户端验证也没有。在母版页的头部区域,我还包括了以下脚本 是什么导致了这个问题?解决办法是什么?
我正在使用Spring验证来验证Rest Controller输入,如果有人能告诉我是否有可能在异常情况下抛出自定义消息,并且自定义消息应来自属性文件,我将不胜感激。 用户控制器.java 用户验证程序.java 消息.属性 自定义消息源配置.java 浏览器响应
我昨天让它工作,然后我做了一些事情,现在我一直试图修复它几个小时,我只是无法让它工作了。 我有一个包含
问题内容: 我在做一些真正愚蠢的事情时遇到了一个大问题。也就是说,打开流到我的META-INF文件夹中的资源文件。我正在使用jar工具并执行以下操作: 我只是一个空!该项目是使用maven构建的,xsd文件最终位于META-INF文件夹中,但仍然无法使用。 我不理解的是背后的理论?ClassLoader如何在文件系统中执行查找?如何获得文件? 问题答案: 尝试删除第一个斜杠: 如果要在对象上调用方
我正在尝试从com包中的CSV文件中读取值。实例但当我使用以下语法运行代码时: 上面写着: java.io.FileNotFoundException: Dataset.csv 我也尝试过使用: 仍然不工作。任何帮助都会很有帮助。谢谢
我正在运行此命令以从普通群集(未安装hadoop)中读取 Azure 数据砖中的数据。 我得到了这个错误 你能建议我需要安装什么样的jar来让它工作吗