我通过扩展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
答案 0 :(得分:0)
我也遵循了该教程,并且该课程中的错误并非如此。它在类apiError中。您应该生成getter和setter,这些内容并未在教程中显示。
教程链接:http://www.baeldung.com/global-error-handler-in-a-spring-rest-api
答案 1 :(得分:0)
您需要在ErrorMessage类中定义吸气剂。
答案 2 :(得分:0)