我有一个Spring Boot REST服务器,它应该在提供无效输入时返回特定的错误代码。我在这里不需要任何i18n,只是简单的英文错误代码,比如'缺少'就足够了。如何为验证消息使用不同的错误代码?
使用带有Hibernate Validator的Spring Boot,验证后我得到一个回弹簧Errors
对象。
对于每个错误我可以得到code
和defaultMessage
。对于@NotBlank约束,这将返回NotBlank
和。
基本上我想把这个错误翻译成missing
,因为我对i18n翻译不感兴趣。还有其他的限制,我想更多的REST友好的错误代码。
我虽然要使用简单的messages.properties
或ValidationMessages.properties
内部src/main/resources
但这不会工作不幸。注意我试着添加一个通用的NotBlank=missing
和特定的NotBlank.entity.field=missing
属性。
我不知道为什么它不工作...也许是因为解决国际化的消息(在JSP世界)不直接通过Spring Errors
而是通过MessageCodesResolver
实现(只是猜测)。
也许我可以从Spring Error
得到错误代码,并从消息代码解析器中进行查找。 但我想知道为什么error.getDefaultMessage
不会从ValidationMessages.properties
返回适当的值。
任何建议是值得欢迎的。
因为'error.getDefaultMessage'获取默认消息,并且这是由代码生成的消息,而不是来自属性文件。如果您查看['MessageSource.getMessage'](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/MessageSource.html#getMessage-java.lang.String -java.lang.Object:A-java.lang.String-java.util.Locale-)方法,您会看到传入了'defaultMessage'。使用验证时将使用相同的机制。 –
Thx解释!你会提出什么建议前进? –
您可以将错误(按原样)传递给'MessageSource',从'Errors'对象返回的错误都是'MessageSourceResolvable'的实例。因此,只需遍历错误,将它们传递给'MessageSource'并从'messages.properties'获取所需的消息。也许你可以对这个逻辑进行gentrify并把它放在一个产生响应对象的类中。 –