Hibernate Validator自定义消息键,包含类名和字段名

时间:2013-01-31 21:41:07

标签: spring hibernate validation messages field-names

我一直在尝试在@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}")这样做。我希望它最简单。

我该怎么办?

1 个答案:

答案 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验证器生成的错误代码......

我希望它有所帮助(并且有效)。

干杯,

奇科。