我一直在尝试在@Controller类中为Spring MVC管理的REST服务添加自定义消息以验证错误。
员工类:
public class Employee {
@NotNull
@NotEmpty
private String company;
...
}
我的REST服务:
@ResponseStatus(value = HttpStatus.CREATED)
@RequestMapping(method = RequestMethod.POST)
public void add(@RequestBody @Valid Employee employee) {
employees.add(employee);
}
验证错误解析
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public @ResponseBody
List<String> validationExceptions(MethodArgumentNotValidException e) {
List<String> errors = new ArrayList<String>();
for (FieldError error : e.getBindingResult().getFieldErrors()) {
errors.add(error.getDefaultMessage());
}
return errors;
}
所以我在我的类路径的根目录上放置了ValidationMessages.properties,但我无法使用以下密钥NotEmpty.employee.company
获取自定义消息。
我知道有很多方法可以使用ResourceBundle和error.getCode(),甚至使用键org.hibernate.validator.constraints.NotEmpty.message
来实现这一点,但我希望将特定消息发送到特定对象的特定字段。
我也不想对@NotEmpty(message = "NotEmpty.employee.company}")
这样做。我希望它最简单。
我该怎么办?
答案 0 :(得分:0)
您是否尝试过实施自己的
org.springframework.validation.MessageCodesResolver
然后在配置文件中声明您的实现:
<mvc:annotation-driven message-codes-resolver="org.example.YourMessageCodesResolverImpl"/>
我试一试,看来这个可以像你想要的那样构建自定义错误代码:
String[] resolveMessageCodes(String errorCode, String objectName, String field, Class<?> fieldType)
唯一且重要的事情我不确定它是否会覆盖hibernate验证器生成的错误代码......
我希望它有所帮助(并且有效)。
干杯,
奇科。