我想捕捉我的异常但是....它对我不起作用,我尝试了一切。我注意到一件事,如果我将代码保留在 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
移动方法
我的项目结构:
答案 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());
}
}
Http400BadRequest
是 RuntimeException