[英]@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());
}
}
Http400BadRequest
是RuntimeException
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.