Spring ResponseEntity:使用构造函数还是静态构建器?

时间:2017-05-24 07:40:49

标签: java spring spring-boot

在Spring Boot RestController中,我使用springframework类ResponseEntity来返回端点调用的响应。

我最近发现有两种方法来实例化这个类。

使用构造函数:

Here is the terminal error message:
 File "/Users/bobsmith/PycharmProjects/inference_engine2/inference2/Proofs/prove.py", line 36, in <module>
    wb4 = load_workbook('../temp_proof.xlsx')

  File "/Library/Python/2.7/site-packages/openpyxl/reader/excel.py", line 151, in load_workbook
    archive = _validate_archive(filename)

  File "/Library/Python/2.7/site-packages/openpyxl/reader/excel.py", line 115, in _validate_archive
    archive = ZipFile(filename, 'r', ZIP_DEFLATED)

  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 756, in __init__
    self.fp = open(file, modeDict[mode])
IOError: [Errno 2] No such file or directory: '../temp_proof.xlsx'

使用静态构建器:

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

生成的实例接缝是相同的。

我想知道,各自的优点和缺点是什么? 我应该在哪种情况下优先使用其中一种?

3 个答案:

答案 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();

此外,对于具有长参数列表的构造函数,很难看到每个参数的语义。在那些情况下,我更喜欢建设者。

答案 1 :(得分:0)

如果要定义许多类似的端点,比如在定义新API时,我发现使用构造函数从长远来看更好。因为随着时间的推移,您在使用静态构建器时会得到重复的代码。

特别是在标题的情况下; Content-Type,Accept,Encoding等必须设置所有响应并在每个控制器方法中写出每个响应都很麻烦。使用构造函数可以更容易地将这样的样板代码分离到单独的函数中。

无论如何,这就是我所感受到的。

答案 2 :(得分:0)

所以答案似乎是“您可以根据您的个人代码偏好无动于衷”