From 32cefe19b107e1bd759c809aea518cee8645ac74 Mon Sep 17 00:00:00 2001 From: ydvorzhetskiy Date: Wed, 30 Oct 2019 21:36:30 +0300 Subject: [PATCH] Spring-2019-08 - 18 - Solution from the class --- .../src/main/java/ru/otus/spring/Main.java | 35 +++++++------------ 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/2019-08/spring-18/spring-18-solution/src/main/java/ru/otus/spring/Main.java b/2019-08/spring-18/spring-18-solution/src/main/java/ru/otus/spring/Main.java index c9b686ae..934532de 100644 --- a/2019-08/spring-18/spring-18-solution/src/main/java/ru/otus/spring/Main.java +++ b/2019-08/spring-18/spring-18-solution/src/main/java/ru/otus/spring/Main.java @@ -1,5 +1,6 @@ package ru.otus.spring; +import org.apache.commons.lang3.StringUtils; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; @@ -16,7 +17,9 @@ import java.util.Arrays; import static org.springframework.http.MediaType.APPLICATION_JSON; import static org.springframework.web.reactive.function.BodyInserters.fromObject; import static org.springframework.web.reactive.function.server.RequestPredicates.accept; +import static org.springframework.web.reactive.function.server.RequestPredicates.queryParam; import static org.springframework.web.reactive.function.server.RouterFunctions.route; +import static org.springframework.web.reactive.function.server.ServerResponse.notFound; import static org.springframework.web.reactive.function.server.ServerResponse.ok; @SpringBootApplication @@ -36,31 +39,19 @@ public class Main { @Bean public RouterFunction composedRoutes(PersonRepository repository) { - - PersonHandler handler = new PersonHandler(repository); - - RouterFunction route = route() - .GET("/func/person", accept(APPLICATION_JSON), handler::list) + return route() + .GET("/func/person", queryParam("name", StringUtils::isNotEmpty), + request -> request.queryParam("name") + .map(repository::findAllByLastName) + .map(persons -> ok().body(persons, Person.class)) + .orElse(notFound().build()) + ) + .GET("/func/person", accept(APPLICATION_JSON), + request -> ok().contentType(APPLICATION_JSON).body(repository.findAll(), Person.class)) .GET("/func/person/{id}", accept(APPLICATION_JSON), request -> repository.findById(request.pathVariable("id")) .flatMap(person -> ok().contentType(APPLICATION_JSON).body(fromObject(person))) - ) - .build(); - - return route; - } - - static class PersonHandler { - - private PersonRepository repository; - - PersonHandler(PersonRepository repository) { - this.repository = repository; - } - - Mono list(ServerRequest request) { - return ok().contentType(APPLICATION_JSON).body(repository.findAll(), Person.class); - } + ).build(); } }