2017-05-24 1 views
1

In einem Spring Boot RestController verwende ich die Springframework-Klasse ResponseEntity, um die Antwort für den Endpunktanruf zurückzugeben.Spring ResponseEntity: Verwenden Sie Konstruktor oder statischen Builder?

Ich habe kürzlich herausgefunden, dass es zwei Möglichkeiten gibt, diese Klasse zu instanziieren.

den Konstruktor:

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

den statischen Builder:

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

Die resultierenden Beispiel Nähte gleich sein.

Ich frage mich, was sind die Vor- und Nachteile von jedem? In welcher Situation sollte ich vorzugsweise das eine oder andere verwenden?

Antwort

0

Mit einem Konstruktor müssen Sie seine Parameter im Voraus konstruieren, während Sie mit einem Builder dies in einer fließenden Anweisung tun können.

// 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(); 

Auch mit Konstrukteuren, die eine lange Liste von Parametern haben es schwierig wird, die Semantik der einzelnen Parameter zu sehen. In diesen Fällen würde ich einen Builder bevorzugen.

0

Wenn Sie viele ähnliche Endpunkte definiert haben, z. B. beim Definieren einer neuen API, habe ich festgestellt, dass die Verwendung des Konstruktors auf lange Sicht besser ist. Weil Sie im Laufe der Zeit mit sich wiederholenden Code beim Verwenden von statischen Buildern enden.

Speziell im Fall von Kopfzeilen; Content-Type, Accept, Encoding usw. müssen bei allen Antworten gesetzt werden und das Schreiben jeder einzelnen Controller-Methode ist umständlich. Das Trennen eines solchen Standardcodes in eine separate Funktion ist für Konstrukteure einfacher.

Das habe ich jedenfalls gefühlt.

Verwandte Themen