繁体   English   中英

@ControllerAdvice 和 @ExceptionHandler 不捕获异常

[英]@ControllerAdvice with @ExceptionHandler don't catch exceptions

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

@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());
}

我的 controller class:

@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移动方法时,我才能捕捉到

我的项目结构:

在此处输入图像描述

第一件事是你不应该扩展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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM