2016-04-08 7 views
2

コントローラに@RestControllerと注釈が付けられているので、@RequestMappingと注釈されたすべてのメソッドに自動的に@ResponseBodyが追加されます。しかし、私は@ExceptionHandlerアノテーションを使用して、いくつかの応答を返す場合:RestControllerのSpring ExceptionHandler

@ExceptionHandler 
public @ResponseBody Response someHandler(Exception ex) { ... } 

私はハンドラから@ResponseBodyを削除できますか?そして@ControllerAdviceを使用している場合は、ハンドラから@ResponseBody注釈を削除することは可能ですか?

答えて

2

Spring 4.0の時点で、@ResponseBodyアノテーションをタイプレベルに追加することもできます。この場合、が継承され、メソッドレベルに追加する必要はありません。したがって、タイプレベル@ResponseBodyを使用した場合、ではなく、@RequestMappingExceptionHandlerで使用する必要があります。

ハンドラから@ResponseBodyを削除できますか?

@RestController@ResponseBody@Controllerを組み合わせたステレオタイプ注釈です。ですから、@RestContorllerはタイプレベルで@ResponseBodyを追加するので削除できます。

@ControllerAdviceを使用している場合、@ResponseBody 注釈をハンドラから削除できますか?

いいえ、タイプレベルにResponseBodyを追加しない限り、ここではできません。

どちらの場合でも、戻り値としてResponseEntityのインスタンスを返すと、ResponseBodyは必要ありません。

関連する問題