带有@ExceptionHandler 的@ControllerAdvice 不会捕获异常

时间:2021-06-09 08:34:34

标签: java spring-boot exception

我想捕捉我的异常但是....它对我不起作用,我尝试了一切。我注意到一件事,如果我将代码保留在 Controllery 类中,那么一切正常。但现在我的目标是将处理程序异常移动到一个单独的类中。

@ControllerAdvice
public class RestResponseEntityExceptionHandler
        extends ResponseEntityExceptionHandler {

 @ExceptionHandler(Http400BadRequest.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public @ResponseBody
    ErrorResponse handleBadRequestException(Http400BadRequest e) {
        return new ErrorResponse("BAD_REQUEST", e.getMessage());
}

我的控制器类:

@Validated
@Controller
@RequestMapping(value = "/")
public class Controller1 {

    private final Service service;

    @Autowired
    public Controller1(Service service) {
        this.service= service;
    }

    @PostMapping("v1/house")
    @ResponseStatus(HttpStatus.OK)
    })
    public House houseRequest(@Valid @RequestBody HouseRequest house, @RequestParam String houseId) {
        return service.searchHouse(house, houseId);
    }

}

我想从@Valid 捕获异常,因为这会抛出 Bad400Request,而且我在代码中有 throw new Http400BadRequest(new FieldError("test"));,我也想捕获它。仅当我从 RestResponseEntityExceptionHandler 类中的 Controller 移动方法

时才能捕获

我的项目结构:

enter image description here

1 个答案:

答案 0 :(得分:0)

第一件事是你不应该扩展 ResponseEntityExceptionHandler 否则默认情况下其他处理异常的所有其他行为都将丢失。

对于你的情况,试试这个:

@RestControllerAdvice
public class RestResponseEntityExceptionHandler{

    @ExceptionHandler(value = {Http400BadRequest.class})
    protected void handleBadRequest(RuntimeException e, HttpServletResponse response) throws IOException {
    
        response.sendError(HttpStatus.BAD_REQUEST.value(), e.getMessage());
    }
}

Http400BadRequestRuntimeException