舉例
我們先從示例應(yīng)用程序的一些摘錄開始。下面是暴露Person
對象的響應(yīng)信息庫。很類似于傳統(tǒng)的,非響應(yīng)信息庫,只不過它返回Flux<Person>而傳統(tǒng)的返回List<Person>,以及返回Mono<Person>
的地方返回Person。Mono<Void>用作完成標(biāo)識:指出何時(shí)保存被完成。關(guān)于Reactor類型的更多信息,請參閱
public interface PersonRepository { Mono<Person> getPerson(int id); Flux<Person> allPeople(); Mono<Void> savePerson(Mono<Person> person);
}
下面是我們?nèi)绾伪┞稁в行碌暮瘮?shù)式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));
}));
下面我們要介紹如何運(yùn)行,比如在Reactor Netty中: