BAEL-2304 Improve webflux original article
- Added snippets for spring reactive functional tutorial
This commit is contained in:
parent
22db7b8c92
commit
5f0cc2716e
|
@ -0,0 +1,75 @@
|
||||||
|
package com.baeldung.reactive.functional;
|
||||||
|
|
||||||
|
import static org.springframework.web.reactive.function.BodyExtractors.toMono;
|
||||||
|
import static org.springframework.web.reactive.function.server.RequestPredicates.GET;
|
||||||
|
import static org.springframework.web.reactive.function.server.RequestPredicates.POST;
|
||||||
|
import static org.springframework.web.reactive.function.server.RouterFunctions.route;
|
||||||
|
import static org.springframework.web.reactive.function.server.ServerResponse.ok;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.security.config.web.server.ServerHttpSecurity;
|
||||||
|
import org.springframework.security.web.server.SecurityWebFilterChain;
|
||||||
|
import org.springframework.web.reactive.function.server.RouterFunction;
|
||||||
|
import org.springframework.web.reactive.function.server.ServerResponse;
|
||||||
|
|
||||||
|
import com.baeldung.webflux.Employee;
|
||||||
|
import com.baeldung.webflux.EmployeeRepository;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class EmployeeFunctionalConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
EmployeeRepository employeeRepository() {
|
||||||
|
return new EmployeeRepository();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
RouterFunction<ServerResponse> getAllEmployeesRoute() {
|
||||||
|
return route(GET("/employees"),
|
||||||
|
req -> ok().body(
|
||||||
|
employeeRepository().findAllEmployees(), Employee.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
RouterFunction<ServerResponse> getEmployeeByIdRoute() {
|
||||||
|
return route(GET("/employees/{id}"),
|
||||||
|
req -> ok().body(
|
||||||
|
employeeRepository().findEmployeeById(req.pathVariable("id")), Employee.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
RouterFunction<ServerResponse> updateEmployee() {
|
||||||
|
return route(POST("/employees/update"),
|
||||||
|
req -> req.body(toMono(Employee.class))
|
||||||
|
.doOnNext(employeeRepository()::updateEmployee)
|
||||||
|
.then(ok().build()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
RouterFunction<ServerResponse> composedRoutes() {
|
||||||
|
return
|
||||||
|
route(GET("/employees"),
|
||||||
|
req -> ok().body(
|
||||||
|
employeeRepository().findAllEmployees(), Employee.class))
|
||||||
|
|
||||||
|
.and(route(GET("/employees/{id}"),
|
||||||
|
req -> ok().body(
|
||||||
|
employeeRepository().findEmployeeById(req.pathVariable("id")), Employee.class)))
|
||||||
|
|
||||||
|
.and(route(POST("/employees/update"),
|
||||||
|
req -> req.body(toMono(Employee.class))
|
||||||
|
.doOnNext(employeeRepository()::updateEmployee)
|
||||||
|
.then(ok().build())));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
|
||||||
|
http.csrf()
|
||||||
|
.disable()
|
||||||
|
.authorizeExchange()
|
||||||
|
.anyExchange()
|
||||||
|
.permitAll();
|
||||||
|
return http.build();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.baeldung.reactive.functional;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class EmployeeSpringFunctionalApplication {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(EmployeeSpringFunctionalApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package com.baeldung.reactive.functional;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.springframework.test.web.reactive.server.WebTestClient;
|
||||||
|
|
||||||
|
import com.baeldung.webflux.Employee;
|
||||||
|
|
||||||
|
public class EmployeeSpringFunctionalIntegrationTest {
|
||||||
|
|
||||||
|
private static EmployeeFunctionalConfig config = new EmployeeFunctionalConfig();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenEmployeeId_whenGetEmployeeById_thenCorrectEmployee() {
|
||||||
|
WebTestClient client = WebTestClient
|
||||||
|
.bindToRouterFunction(config.getEmployeeByIdRoute())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Employee expected = new Employee("1", "Employee 1");
|
||||||
|
|
||||||
|
client.get()
|
||||||
|
.uri("/employees/1")
|
||||||
|
.exchange()
|
||||||
|
.expectStatus()
|
||||||
|
.isOk()
|
||||||
|
.expectBody(Employee.class)
|
||||||
|
.isEqualTo(expected);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue