【问题标题】:Does ControllerAdvice increase response time?ControllerAdvice 是否会增加响应时间?
【发布时间】:2018-02-19 22:04:23
【问题描述】:

使用 ControllerAdvice 抛出 RuntimeException 和手动返回 ResponseEntity 处理客户端错误时,速度有区别吗?

1) 控制器建议

@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);
    } 

}

【问题讨论】:

    标签: spring exception model-view-controller


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 2018-02-21
        相关资源
        最近更新 更多