1. 程式人生 > >SpringBoot2.0學習筆記二使用WebFlux實現簡單案例

SpringBoot2.0學習筆記二使用WebFlux實現簡單案例

一、建立路由函式的配置類

在學習筆記一中的專案中新增一個config包,新建一個名稱為RouterFunctionConfig的配置類,使用@Configuration

@Configuration註解用於標註該類為一個配置類,是Spring3.0後推出的用於代替xml配置的註解

二、在UserRepository類中新增findAll方法用於查詢全部使用者

學習筆記一中只實現了新增一個使用者的功能,使用的是SpringMVC的方式進行實現的,再新增一個findAll方法用於獲取已經新增的全部使用者的資訊,其具體的實現方法如下:

public Collection<User> findAll() {
    Collection<User> users = new ArrayList<>();
    for (Integer index : repository.keySet()) {
        users.add(repository.get(index));
    }
    return users;
}

由於採用記憶體儲存使用者資訊的方式,此處只需便利儲存使用者的ConcurrentMap容器即可

三、配置路由實現前端的訪問

在路由函式的配置類中新增一個方法,該方法返回一個RouterFunction的物件,RouterFunction為一個介面型別(此處有待了解,大致意思是用於處理網路請求的一個介面吧),具體實現如下:

/**
 * Servlet請求介面:ServletRequest或者HTTPServletRequest
 *        響應介面:ServletResponse或者HTTPServletResponse
 *  Spring5.0以後重新定義了伺服器請求和響應介面
 *      請求介面:ServerRequest (封裝後的HTTPServletRequest)
 *      響應介面:ServerResponse     (封裝後的HTTPServletResponse)
 *      即可支援Servlet規範,也可以支援自定義 ,比如Netty(WebServer)
 */
@Bean
@Autowired
public RouterFunction<ServerResponse> findAllPerson(UserRepository userRepository) {
    return RouterFunctions.route(RequestPredicates.GET("/person/findAll"),
            request -> {
                Collection<User> users = userRepository.findAll();
                Flux<User> userFlux = Flux.fromIterable(users);
                return ServerResponse.ok().body(userFlux, User.class);
            });
}

關於webFlux還有很多需要學習的地方,此次只是模仿實現了一個簡單案例