一、応答式プログラミングWebFlux紹介兼入門Demo


(1)応答式Springの道術器(2)応答式Springの道術器(2)応答式Springの道術器(3)lamdaと関数式——応答式Springの道術器(4)Reactor 3は、応答式Springの術器(5)Spring WebFluxは迅速に手に入ります.応答式Springの道術器(総綱目)応答式Springの道術器(Spring WebFlux教程) _;はこれらの資料を順番に見て、基本的に入門します.ここではそんなに多くの理論を引っ張らないで、直接Demoで入門します.
(一)Demo目的  以下、関数的に二つのEntdpointを開発します. /timeは現在の時間に戻ります. は現在の日付を返します.
(二)WebFluxの関数的開発基本プロセス  1.一括保存処理時間を作成するHandler類  ここのHandler類はSpring MVCのController層の中の方法体に相当します.
/**
 *       ok()
 */
import static org.springframework.web.reactive.function.server.ServerResponse.ok;

/**
 * @author   
 * @date 2018/6/28 16:38
 */
@Component
public class TimeHandler {
    /**
     *        ,        HttpServletRequest HttpServletResponse,     ServerRequest ServerResponse
     * @param request   
     * @param response   
     * @return Mono Flux          “  ”     ,          String/List....,       
     *         Mono Flux  。    ,Mono          ,Flux        。       id    User,
     *                   User,       Mono;         User,      ,       
     *         Flux。               ,           ;          
     *         ServerRequest request, ServerResponse response
     */
    public Mono getTime(ServerRequest request){
        //        
        return ok().contentType(MediaType.TEXT_PLAIN).body(
                Mono.just("Now is " + new SimpleDateFormat("HH-mm-ss").format(new Date())), String.class);
    }

    public Mono getDate(ServerRequest request){
        return ok().contentType(MediaType.TEXT_PLAIN).body(
                Mono.just("Now is " + new SimpleDateFormat("yyyy-MM-dd").format(new Date())), String.class);
    }
_; 2.Spring容器にRouterFunction ここのHandler類はSpringMVCにおけるController層におけるマッピング経路に相当する(@Request Mapping)
/**
 *       “router”
 */
import static org.springframework.web.reactive.function.server.RequestPredicates.GET;
import static org.springframework.web.reactive.function.server.RouterFunctions.route;

/**
 * @author   
 * @date 2018/6/28 16:55
 */
@Configuration
public class RouterConfig {
    private TimeHandler timeHandler;

    @Autowired
    public RouterConfig(TimeHandler timeHandler) {
        this.timeHandler = timeHandler;
    }

    /**
     *             
     */
    @Bean
    public RouterFunction timeRouter(){
        /**
         *           ,     :  ,     :  
         *           lambda    :request -> timeHandler.getTime(request),     ServerRequest  ,  
         * TimeHandler             “ServerRequest”
         */
        return route(GET("/time"), timeHandler::getTime)
                .andRoute(GET("/date"), timeHandler::getDate);
    }
}