Как использовать RouterFunction of Spring 5 в веб-проекте? - PullRequest
0 голосов
/ 31 августа 2018

Проблема: На Отправить кнопку , я звоню /hello, но это дает мне Статус HTTP 404

Я новичок в Spring 5, так что помогите мне, Как я могу переслать /hello запрос. Я хочу реализовать важные функции Spring 5: (1) Реактивная поддержка программирования (2) Функциональная веб-структура

enter image description here

enter image description here

HelloHandler.java

package com.demo;

import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
import reactor.core.publisher.Mono;

public class HelloHandler {
    public  Mono<ServerResponse> handleRequest(ServerRequest serverRequest) {
        return ServerResponse.ok().body(Mono.just("Hello World!"), String.class);
    }
}

SpringAction.java

package com.demo;

import static org.springframework.web.reactive.function.server.RequestPredicates.GET;
import static org.springframework.web.reactive.function.server.RequestPredicates.POST;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerResponse;

@Configuration
public class SpringAction {

    @Bean
    HelloHandler helloHandler() {
        System.out.println("SpringAction.helloHandler()");
        return new HelloHandler();
    }

    @Bean
    public RouterFunction<ServerResponse> helloRouterFunction(HelloHandler helloHandler) {
        return RouterFunctions.route(GET("/hello"), helloHandler::handleRequest)
                .andRoute(GET("/SpringFunctionalWebFramework/hello"), helloHandler::handleRequest);
    }     
}

SpringFunctionalWebFramework-servlet.xml

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:context = "http://www.springframework.org/schema/context"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:component-scan base-package = "com.demo" />

   <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name = "prefix" value = "/WEB-INF/jsp/" />
      <property name = "suffix" value = ".jsp" />
   </bean>

</beans>

index.jsp

<body>
    <h1>Hello World.</h1>
    <form action="hello" method="GET">
        <input type="submit" value="Submit">
    </form>
</body>

Я также хочу знать, можно ли использовать RouterFunction без Spring-boot или нет?

1 Ответ

0 голосов
/ 01 сентября 2018

Ваше приложение зависит от spring-webmvc, , как описано в справочной документации Spring Boot , это сделает ваше приложение приложением Spring MVC. Поэтому сначала вы должны выяснить, что вызывает эту зависимость, и удалить ее из вашей сборки.

Далее, похоже, ваше приложение не имеет @SpringBootApplication аннотированного класса; если вам нужна хорошая отправная точка, создайте свое приложение с помощью start.spring.io и выберите стартер webflux.

Далее Spring Boot не нуждается и не поддерживает файлы -servlet.xml. Вы должны прочитать о Spring Boot в его справочной документации или взглянуть на Руководства Spring .

Spring WebFlux не поддерживает JSP, поэтому нет необходимости ни настраивать внутренний просмотрщик, ни добавлять файлы JSP в ваше приложение. Вместо этого вам следует искать современную технологию просмотра, такую ​​как усы, тимьян и т. Д. (Все они перечислены на start.spring.io).

Конечно, вы можете использовать Spring WebFlux без Spring Boot, , но это требует ручной настройки и развертывания (во встроенном или внешнем контейнере). Я бы сказал, что Spring Boot, безусловно, самый простой способ.

...