有2个不同的控制器,一个是提货控制器,另一个是交付控制器,我希望无论从哪个控制器生成异常,例如IOException
/ BadRequestException
类,@ControllerAdvice
类应根据从中生成异常的控制器类给出不同的响应。就像对于相同的BadRequestException
对于分拣控制器类的不同响应,对于交付控制器类的不同响应
答案 0 :(得分:0)
只是总结一下当您有两个不同的控制器抛出相同的异常并且您希望每个控制器以不同的方式处理该异常时的可能设置。
设置1:
在每个控制器中创建单独的@ExceptionHandler
方法。如果您只想为该控制器处理异常并且没有设置@ControllerAdvice
会覆盖此异常,则建议使用。
@RestController
@RequestMapping("/pickup")
public class PickupController {
@ExceptionHandler(Exception.class)
protected ResponseEntity<Error> handleException(Exception ex) {
...
}
}
@RestController
@RequestMapping("/delivery")
public class DeliveryController {
@ExceptionHandler(Exception.class)
protected ResponseEntity<Error> handleException(Exception ex) {
...
}
}
设置2:
为每个控制器创建@ControllerAdvice
。如果您的@ControllerAdvice
与控制器处理的异常相同(可能位于某些无法更改的库中),则建议使用。这样,您将可以在@Order
上设置@ControllerAdvice
并将其设置为主。
@ControllerAdvice(assignableTypes = PickupController.class)
@Order(Ordered.HIGHEST_PRECEDENCE)
public class PickupExceptionHandler {
@ExceptionHandler(Exception.class)
protected ResponseEntity<Error> handleException(Exception ex) {
...
}
}
@ControllerAdvice(assignableTypes = DeliveryController.class)
@Order(Ordered.HIGHEST_PRECEDENCE)
public class DeliveryExceptionHandler {
@ExceptionHandler(Exception.class)
protected ResponseEntity<Error> handleException(Exception ex) {
...
}
}