ValidationMessages.properties无法使用BindException

时间:2015-08-22 16:18:18

标签: java spring spring-boot hibernate-validator

我可能只是没有做到这一点,但是这里也是。

我有一个Spring Boot应用程序,我已经添加了Hibernate Validator,我有一个看起来像这样的命令对象:

public class SignupCommand {

  @Pattern(regexp = "^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$")
  private String someDate;

  // getters/setters omitted for brevity

}

控制器中的@RequestMapping看起来像这样:

@RequestMapping(method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public AuthToken signUp(@Valid @RequestBody SignupCommand signupCommand,
                        BindingResult bindingResult) throws BindException {
  if (bindingResult.hasErrors()) {
    throw new BindException(bindingResult);
  }
  return accountService.signUp(signupCommand);
}

这将返回我期望的JSON,错误代码如下所示:

{
  "timestamp" : 1440256315621,
  "status" : 400,
  "error" : "Bad Request",
  "exception" : "org.springframework.validation.BindException",
  "errors" : [ {
    "codes" : [ "Pattern.signupCommand.someDate", "Pattern.someDate", "Pattern.java.lang.String", "Pattern" ],
    "arguments" : [ {
      "codes" : [ "signupCommand.someDate", "someDate" ],
      "arguments" : null,
      "defaultMessage" : "someDate",
      "code" : "someDate"
    }, [ ], "^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$" ],
    "defaultMessage" : "must match \"^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$\"",
    "objectName" : "signupCommand",
    "field" : "someDate",
    "rejectedValue" : "02-16-2015",
    "bindingFailure" : false,
    "code" : "Pattern"
  } ],
  "message" : "Validation failed for object='signupCommand'. Error count: 1",
  "path" : "/api/signup"
}

这是我的问题发生的地方。我尝试在messages.propertiesValidationMessages.properties中将以下内容放在类路径的根目录(src/main/resources)中,但没有任何运气:

Pattern.signupCommand.someDate=Please enter a valid date in the format MM-DD-YYYY.

我想我对Spring如何与Hibernate Validator一起进行消息解析没有足够的理解。任何帮助表示赞赏!

更新

我决定将message="{mymessage}"添加到@Pattern并在这两个文件中加上mymessage=Some message,以查看正在使用哪个文件。它看起来像是能够在ValidationMessages.properties文件中明确定义消息时解析消息。

1 个答案:

答案 0 :(得分:0)

我能够使用this blog post解决我的问题。 Petri再次做到了!

我基本上只需要创建一个@ExceptionHandler并手动解决这些消息。我不确定为什么我认为抛出BindException会自动为我解析我的消息。