Spring ResponseEntityExceptionHandler不解析覆盖消息

时间:2017-11-18 16:19:27

标签: spring-mvc spring-boot

我通过扩展ResponseEntityExceptionHandler重写BindException。

我在属性包中提供了自定义消息。但是,它不会被ResponseEntityExceptionHandler识别。

它确实解决了控制器请求参数上的TypeMistMatch。 但它不在ResponseEntityExceptionHandler内。

我错过了什么吗?

@Component
@ControllerAdvice
public class ExceptionHandler extends ResponseEntityExceptionHandler {

    @Override
    protected ResponseEntity<Object> handleBindException(final org.springframework.validation.BindException ex,
            final HttpHeaders headers, final HttpStatus status, final WebRequest request) {
        logger.info(ex.getClass().getName());
        //
        final List<String> errors = new ArrayList<String>();
        for (final FieldError error : ex.getBindingResult().getFieldErrors()) {
            errors.add(error.getField() + ": " + error.getDefaultMessage());
        }
        for (final ObjectError error : ex.getBindingResult().getGlobalErrors()) {
            errors.add(error.getObjectName() + ": " + error.getDefaultMessage());
        }
        final ErrorMessage apiError = new ErrorMessage(HttpStatus.BAD_REQUEST, ex.getLocalizedMessage(), errors.toString());
        return new ResponseEntity<>(apiError, new HttpHeaders(), HttpStatus.BAD_REQUEST);
    }

}

Msg.properties

typeMismatch.demoPojo.instant= Supposed to be a date
typeMismatch.instant=Instant field
typeMismatch.java.time.Instant=Instant type

3 个答案:

答案 0 :(得分:0)

我也遵循了该教程,并且该课程中的错误并非如此。它在类apiError中。您应该生成getter和setter,这些内容并未在教程中显示。

教程链接:http://www.baeldung.com/global-error-handler-in-a-spring-rest-api

答案 1 :(得分:0)

您需要在ErrorMessage类中定义吸气剂。

答案 2 :(得分:0)

我的@ControlerAdvice中包含注释“ @Order(Ordered.HIGHEST_PRECEDENCE)”解决了我的问题,与您的问题相同。

enter image description here