ControllerAdvice会增加响应时间吗?

时间:2017-09-11 15:42:34

标签: spring exception model-view-controller

使用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);
    } 

}

2 个答案:

答案 0 :(得分:1)

我认为差异是响应时间可以忽略不计,第二种方法可能会稍微快一些。但是拥有@ExtrollerAdvice类和@ExceptionHandlers的真正优势在于它们可以用于多个@Controllers上的多个端点,并且您不必在任何地方重复代码。

答案 1 :(得分:0)

不,它没那么大不同。我认为使用@ControllerAdvice是一种最佳实践,当您想要处理自定义异常或将异常集中到Global类时。答案中有一个简单的示例:Error page registrar and Global exception handling

希望得到这个帮助。