【发布时间】:2018-04-15 23:09:16
【问题描述】:
在 Spring 5 现在有两种方法可以暴露 HTTP 端点。
-
@Controller或@RestController通过创建控制器的类,例如
@RestController
@RequestMapping("persons")
public class PersonController {
@Autowired
private PersonRepo repo;
@GetMapping("/{id}")
public Mono<Person> personById(@PathVariable String id){
retrun repo.findById(id);
}
}
- 使用RouterFunctions在
@Configuration类中路由:
@Bean
public RouterFunction<ServerResponse> personRoute(PersonRepo repo) {
return route(GET("/persons/{id}"), req -> Mono.justOrEmpty(req.pathVariable("id"))
.flatMap(repo::getById)
.flatMap(p -> ok().syncBody(p))
.switchIfEmpty(notFound().build()));
}
使用任何人的方法是否有任何性能差异?从头开始编写应用程序时,我应该使用哪一个。
【问题讨论】:
-
这是一个偏好问题,而不是性能问题。
-
我仍然不明白为什么有人会更喜欢路由器。与控制器相比,它非常不可读。也许我不明白这一点......编辑:见sparkbit.pl/spring-web-reactive-rest-controllers“当你想要创建的只是一个非常小的服务时,这种方法[功能性Web框架]的优点是简单和减少样板代码。”跨度>
-
目前(spring boot 2.1)我建议使用Controller,不是出于性能原因,只是因为路由器功能没有验证,招摇集成等功能。与您关于性能的问题有关,改进将带有 bean 反应式。
标签: spring spring-boot spring-webflux reactive