在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);
生成的实例接缝是相同的。
我想知道,各自的优点和缺点是什么? 我应该在哪种情况下优先使用其中一种?
答案 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)
所以答案似乎是“您可以根据您的个人代码偏好无动于衷”