【发布时间】:2019-01-24 10:38:57
【问题描述】:
所以我在 API 中构建了这个 springboot REST 消费者。 API 请求依赖于不同的 API。
用户可以向我的 API 发出请求,而我的 API 向另一个服务发出请求以使用户登录。
在构建它时,我得出的结论是,返回 ResponseEntity 比仅在请求正文中返回结果要慢得多。
这是我的快速代码,响应时间不到一秒:
@PostMapping("/adminLogin")
fun adminLogin(@RequestBody credentials: Credentials): AuthResponse {
return RestTemplate().getForEntity(
"$authenticatorURL/adminLogin?userName=${credentials.username}&passWord=${credentials.password}",
AuthResponse::class.java).body
}
当这样做时,需要花费很多秒来响应:
@PostMapping("/adminLogin")
fun adminLogin(@RequestBody credentials: Credentials): ResponseEntity<AuthResponse> {
return RestTemplate().getForEntity(
"$authenticatorURL/adminLogin?userName=${credentials.username}&passWord=${credentials.password}",
AuthResponse::class.java)
}
有人可以向我解释为什么一种方法比另一种方法更快的区别是什么。
【问题讨论】:
-
你怎么知道你的函数的返回类型对性能有这么大的影响?也许是第三方服务调用?
-
这就是我的想法,该服务在我的机器上本地运行。当邮递员直接拨打服务电话时,速度非常快。我知道删除 Response 类型会如何影响性能。
-
我认为,最终
AuthResponse对象仍然被包裹在ResponseEntity下面,但这是我的猜测。无论如何,我会为我的好奇心进行一些测试。 -
看看:pastebin.com/5pE9Dbrs。我创建了简单的 rest api 和一个控制器。两种方法,一种返回
String,一种返回ResponseEntity<String>。不是那些是纳米,所以差异很小。 -
我不确定,但我想,当你不添加
ResponseEntity<type>时,Spring 无论如何都会添加它,因为你不仅得到了对象,而且你获取响应状态、标头等。
标签: performance spring-boot kotlin