我可能只是没有做到这一点,但是这里也是。
我有一个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.properties
和ValidationMessages.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
文件中明确定义消息时解析消息。
答案 0 :(得分:0)
我能够使用this blog post解决我的问题。 Petri再次做到了!
我基本上只需要创建一个@ExceptionHandler
并手动解决这些消息。我不确定为什么我认为抛出BindException
会自动为我解析我的消息。