我正在尝试覆盖一个方法:
@RestControllerAdvice
public class ControllersExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleBindException(BindException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
return handleExceptionInternal(ex, new ErrorDto(HttpStatus.BAD_REQUEST.value(),
"Invalid credentials! Password should has min 8 symbols and all fields are required"),
headers, status, request);
}
}
==============================
@Data
@AllArgsConstructor
public class ErrorDto {
private int status;
private String message;
}
我试图覆盖它,以便它向客户端返回一个清晰的响应,但结果是这样的:
而且,好像没有试图用 ResponseEntity 变态,它总是返回空 json。如何纠正?
很可能您正在抛出其他异常,而不是
BindException
该类还包含一大堆
ResponseEntityExceptionHandler
其他. 其中一些默认返回 400 代码和一个空正文。handleBindException
handle***
使用调试器检查哪个异常正在进入
ResponseEntityExceptionHandler.handleException
以及哪个handle***
异常被抛出upd:使用时
@Valid
会@Size(min=10)
抛出异常MethodArgumentNotValidException
,可以通过覆盖方法来处理handleMethodArgumentNotValid