2017-09-11 8 views
0

ControllerAdviceを使用してRuntimeExceptionをスローしたとき、およびクライアントエラーを処理するために手動でResponseEntityを返すときに、スピードの違いはありますか?ControllerAdviceは応答時間を延長しますか?

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)手動I違いを想像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); 
    } 

} 

答えて

1

を返す応答時間が第二のアプローチは、おそらく非常にわずかに速いことと無視できる程度です。しかし、@ExceptionHandlersで@ControllerAdviceクラスを持つことの本当の利点は、これらが複数の@Controllers上の複数のエンドポイントで使用できることです。コードをどこでも繰り返す必要はありません。

0

いいえ、あまり違いはありません。そして、@ControllerAdviceの使用は、カスタム例外を処理したり、ExceptionをGlobalクラスに集中させたりする場合にはベストプラクティスと考えています。この回答には簡単なサンプルがあります:Error page registrar and Global exception handling

このヘルプが必要です。

関連する問題