spring - 如何用@Email 注释替换占位符消息
问题描述
我知道如何在 Spring 中用实际值替换占位符,并且在我的应用程序中事情对我有用,但我的问题特定于以下用例。
甚至可以将 ${malformed.email.address} 替换为属性文件中的实际值吗?
@RequestMapping(value = "/forgot-password", method = RequestMethod.POST)
public ResponseEntity<String> forgotPassword(@RequestBody @Email(message = "${malformed.email.address}") @NotNull String emailAddress, UriComponentsBuilder ucBuilder) {
System.out.println("Forgot password for User : " + emailAddress);
try {
userService.forgotPassword(emailAddress);
return new ResponseEntity<String>("If " + emailAddress + " existed then you should receive an email soon.", HttpStatus.OK);
} catch (ServiceException e) {
throw new ControllerRuntimeException(e);
}
}
我有这个配置:
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
我在类路径中有 messages.properties 文件,并且填充了 spring 的 Environment 对象。
这是我的异常处理程序:
@ControllerAdvice
public class ConstraintViolationExceptionHandler {
@ExceptionHandler(ConstraintViolationException.class)
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
public String handleValidationException(ConstraintViolationException e) {
for (ConstraintViolation<?> s : e.getConstraintViolations()) {
return s.getInvalidValue() + ": " + s.getMessage();
}
return "Invalid request supplied";
}
}
这是我得到的回应:
WARN | 2019-02-05 00:21:16,622 |
org.hibernate.validator.internal.engine.messageinterpolation.ElTermResolver | HV000129: EL expression '${malformed.email.address}' references an unknown
property
javax.el.PropertyNotFoundException: ELResolver cannot handle a null base
Object with identifier [malformed]
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:120)
at org.apache.el.parser.AstValue.getValue(AstValue.java:137)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
at org.hibernate.validator.internal.engine.messageinterpolation.ElTermResolver.interpolate(ElTermResolver.java:65)
at org.hibernate.validator.internal.engine.messageinterpolation.InterpolationTerm.interpolate(InterpolationTerm.java:64)
at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.interpolate(ResourceBundleMessageInterpolator.java:75)
at org.hibernate.validator.messageinterpolation.AbstractMessageInterpolator.interpolateExpression(AbstractMessageInterpolator.java:387)
at org.hibernate.validator.messageinterpolation.AbstractMessageInterpolator.interpolateMessage(AbstractMessageInterpolator.java:344)
解决方案
推荐阅读
- encoding - 如何批量更改文件的编码
- r - 我如何在 R 中制作人们的或有决策的概况?
- java - 如果 id 已经存在,Java 更新 mysql 行
- javascript - 如何让我的页面在不滚动的情况下按比例显示?
- stream - Create a new stream from a stream in Dart
- perl - How would one calculate binary statistics in perl?
- angular - 从反应形式更新 ngrx 实体
- mysql - mysql error; Error Code: 1136. Column count doesn't match value count at row 1
- r - Match everything up until first instance of a colon
- javascript - how to load json variable into D3?