使用ControllerAdvice抛出RuntimeException和手动返回ResponseEntity来处理客户端错误时是否存在速度差异?
1)ControllerAdvice
@RestController
public class ObjectController {
@PostMapping
public Object save(@RequestBody Object object) {
if (service.isInvalid(object))
throw new ObjectException("Client error");
return service.save(object);
}
}
public class ObjectException extends RuntimeException {
}
@ControllerAdvice
public class ObjectControllerAdvice extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = {ObjectException.class})
protected ResponseEntity<Object> handleConflict(ObjectException ex, WebRequest request) {
return handleExceptionInternal(ex, ex.getLocalizedMessage(), new HttpHeaders(),
HttpStatus.BAD_REQUEST, request);
}
}
2)手动返回ResponseEntity
@RestController
public class ObjectController {
@PostMapping
public ResponseEntity<Object> save(@RequestBody Object object) {
if (service.isInvalid(object))
return new ResponseEntity<>("Client error", HttpStatus.BAD_REQUEST);
return new ResponseEntity<Object>(service.save(object), HttpStatus.OK);
}
}
答案 0 :(得分:1)
我认为差异是响应时间可以忽略不计,第二种方法可能会稍微快一些。但是拥有@ExtrollerAdvice类和@ExceptionHandlers的真正优势在于它们可以用于多个@Controllers上的多个端点,并且您不必在任何地方重复代码。
答案 1 :(得分:0)
不,它没那么大不同。我认为使用@ControllerAdvice是一种最佳实践,当您想要处理自定义异常或将异常集中到Global类时。答案中有一个简单的示例:Error page registrar and Global exception handling
希望得到这个帮助。