我在我的@javax.validation.Valid
和@RestController
课程中添加了验证(@RequestBody
),并使用了@NotEmpty
注释:
public class Invoice {
@NotEmpty
private String commentText;
// omitted
}
当调用缺少commentText
的REST调用时,会向客户端返回正确的错误:
{
"timestamp": 1475599494823,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.web.bind.MethodArgumentNotValidException",
"errors": [ {
"codes": [
"NotEmpty.invoice.commentText",
"NotEmpty.commentText",
"NotEmpty.java.lang.String",
"NotEmpty"
],
"arguments": [ {
"codes": [
"invoice.commentText",
"commentText"
],
"defaultMessage": "commentText",
"code": "commentText"
}],
"defaultMessage": "may not be empty",
"objectName": "invoice",
"field": "commentText",
"bindingFailure": false,
"code": "NotEmpty"
}],
"message": "Validation failed for object='invoice'. Error count: 1",
"path": "/api/invoices/1"
}
然后我创建了 src / main / resources / messages.properties ,内容如下:
NotEmpty.invoice.commentText=Please type a comment
问题是,而不是自定义“请输入评论”,原始错误消息将返回给客户。
我正在使用带有YAML配置的SpringBoot 1.4并在Eclipse中运行应用程序。
知道问题可能在哪里?
答案 0 :(得分:0)
而不是@NotEmpty
注释尝试使用javax.validation
包中的替代:@NotNull
和@Size(min=1)
。
此外,您可能会发现此示例项目对您有用:https://github.com/MichaelKnight/ValidandoFormularios
如果出于某种原因需要使用@NotEmpty注释,那么您应该创建一个文件ValidationMessages.properties并将其放入类路径中。
为避免密钥翻译出现问题,您可以指示如下消息密钥:@NotEmpty(message="{NotEmpty.invoice.commentText}")
。或者看看这里:
http://docs.jboss.org/hibernate/validator/4.3/reference/en-US/html/validator-usingvalidator.html#section-message-interpolation