2017-05-24 46 views
1

Spring Boot RestControllerではspringframeworkクラスResponseEntityを使用してエンドポイント呼び出しの応答を返します。Spring ResponseEntity:コンストラクタまたは静的ビルダーを使用しますか?

私は最近、このクラスをインスタンス化する2つの方法があることを発見しました。同じことが、得られたインスタンス継ぎ目

response = ResponseEntity.ok().headers(myHeaders).body(myDto); 

:静的ビルダーを使用

response = new ResponseEntity<MyDto>(myDto, myHeaders, HttpStatus.OK); 

:コンストラクタを使用して

それぞれの賛否両論は何ですか? いずれの状況でどちらを使用するのが好ましいか?

答えて

0

コンストラクタでは、事前にパラメータを構築しなければなりませんが、ビルダーではこれを1つの流暢な文で行います。

// constructor 
MultiValueMap<String, String> headers = ...; 
ResponseEntity<String> resp = new ResponseEntity(headers, HttpStatus.OK); 

// builder 
ResponseEntity<String> resp = ResponseEntity.ok() 
    .header("header1", "value1") 
    .header("header2", "value2") 
    .build(); 

また、パラメータのリストが長いコンストラクタでは、各パラメータのセマンティクスを確認することが困難になります。そのような場合は、ビルダーが好きです。

0

新しいAPIを定義するときと同じように、定義する類似のエンドポイントがたくさんある場合は、コンストラクターを使用する方が長期的には優れていることがわかりました。時間が経つと、静的ビルダーを使用している間に繰り返しコードが生成されるためです。

特にヘッダーの場合。 Content-Type、Accept、Encodingなどはすべてのレスポンスに設定する必要があり、すべてのコントローラメソッドでそれぞれを書き出すのは面倒です。このような定型コードを別の関数に分けることは、コンストラクタで簡単です。

これは私がとにかく感じたことです。

関連する問題