恕我直言的例外情况适用于特殊情况。如果可以毫无例外地处理场景,则不应抛出异常。
创建异常需要至少1毫秒,并且会带来性能影响。那么处理错误情况的最佳方法是哪种?
场景#1:
ResponseEntity createOrder(@RequestBody Order order){
if(order.items == null)
return ResponseEntity.badRequest().build();
...
}
方案#2: Spring提供了Error Handling for REST with Spring
中提到的@ControllerAdvice和ResponseEntityExceptionHandlerResponseEntity createOrder(@RequestBody Order order){
if(order.items == null)
throw new CustomException();
...
}
@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = { CustomException.class })
protected ResponseEntity<Object> handleConflict(RuntimeException ex, WebRequest request) {
String bodyOfResponse = "Error";
return handleExceptionInternal(ex, bodyOfResponse,
new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
}
}
答案 0 :(得分:1)
我个人会选择场景#2,因为它是集中的。稍后您可以更改该特定异常的响应代码或添加一些详细日志记录。在性能方面,#1显然更快,但我会忽略时差
答案 1 :(得分:0)
嗯,在特定情况下,我会使用Hibernate进行验证,而不是让无效数据进入控制器开始。
public class Order {
...
@NotNull
@NotEmpty
private List<Integer> items;
}
对于案例项,它将自动创建400错误为空或为空(但内部使用异常)。
要处理其他异常,我会使用@ExceptionHandler
,无论是每个控制器还是通过@ControllerAdvice
(全局捕获)。
创建例外需要至少1毫秒
例外情况很慢,但速度并不慢。