SpringBoot RESTful bean验证的自定义消息无法正常工作

时间:2016-10-04 17:48:05

标签: java spring spring-boot bean-validation

我在我的@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中运行应用程序。

知道问题可能在哪里?

1 个答案:

答案 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