0

我一直在尝试为 @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,但我无法使用以下 key 获取我的自定义消息NotEmpty.employee.company

我知道有很多方法可以使用 ResourceBundle 和 error.getCode(),甚至使用 key org.hibernate.validator.constraints.NotEmpty.message,但我希望有特定对象的特定字段的特定消息。

我也不想这样做@NotEmpty(message = "NotEmpty.employee.company}")。我想要最简单的。

我应该怎么办?

4

1 回答 1

0

您是否尝试过实现自己的

org.springframework.validation.MessageCodesResolver

然后在配置文件中声明你的实现:

<mvc:annotation-driven message-codes-resolver="org.example.YourMessageCodesResolverImpl"/>

我会试一试,似乎这个能够构建自定义错误代码,就像你想要的那样:

String[]    resolveMessageCodes(String errorCode, String objectName, String field, Class<?> fieldType)

我不确定的唯一重要的事情是它是否会覆盖休眠验证器生成的错误代码......

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

干杯,

奇科。

于 2013-04-09T02:42:59.033 回答