舉例
我們先從示例應用程序的一些摘錄開始。下面是暴露Person
對象的響應信息庫。很類似于傳統的,非響應信息庫,只不過它返回Flux<Person>而傳統的返回List<Person>,以及返回Mono<Person>
的地方返回Person。Mono<Void>用作完成標識:指出何時保存被完成。關于Reactor類型的更多信息,請參閱
public interface PersonRepository { Mono<Person> getPerson(int id); Flux<Person> allPeople(); Mono<Void> savePerson(Mono<Person> person);
}
下面是我們如何暴露帶有新的函數式web框架的資源庫:
RouterFunction<?> route = route(GET("/person/{id}"),
request -> {
Mono<Person> person = Mono.justOrEmpty(request.pathVariable("id"))
.map(Integer::valueOf)
.then(repository::getPerson); return Response.ok().body(fromPublisher(person, Person.class));
})
.and(route(GET("/person"),
request -> {
Flux<Person> people = repository.allPeople(); return Response.ok().body(fromPublisher(people, Person.class));
}))
.and(route(POST("/person"),
request -> {
Mono<Person> person = request.body(toMono(Person.class)); return Response.ok().build(repository.savePerson(person));
}));
下面我們要介紹如何運行,比如在Reactor Netty中: