Я создаю приложение, используя как обычные, так и функциональные конечные точки. Если я нажму на любой созданный объект с обычными конечными точками, я получу желаемые результаты. Но представляя функциональные конечные точки, все они возвращают 404. Я следую нескольким различным руководствам, и все они, похоже, используют один и тот же шаблон с обработчиком и маршрутизатором, который я внедрил.
Вот обработчик:
@Service
public class LorcCardHandler {
private final LorcCardReactiveRepository lorcCardReactiveRepository;
@Autowired
public LorcCardHandler(LorcCardReactiveRepository lorcCardReactiveRepository) {
this.lorcCardReactiveRepository = lorcCardReactiveRepository;
}
public Mono<ServerResponse> getCardProjectionList(ServerRequest request) {
return ServerResponse.ok().body(lorcCardReactiveRepository.getAllCardsProjection(), CardProjection.class);
}
}
А вот роутер
@Configuration
public class LorcRouter {
private final LorcCardHandler handler;
public LorcRouter(LorcCardHandler handler) {
this.handler = handler;
}
@Bean
public RouterFunction<ServerResponse> getCardListByRoute() {
return route().path("/lorc", builder -> builder.GET(handler::getCardProjectionList)).build();
}
}
Обновлено: По запросу добавление журналов Инициализация соответствующих bean-компонентов
o.s.b.f.s.DefaultListableBeanFactory: автоматическое подключение по типу от beaame «reactiveMongoTemplate» через фабричный метод к beaamed «mappingMongoConverter». o.s.d.r.c.s.RepositoryFactorySuppo: инициализация экземпляра репозитория для com.luizgomendes.lorc.rest.repository.LorcCardReactiveRepository… o.s.d.r.c.s.RepositoryFactorySuppo: завершено создание экземпляра репозитория для com.luizgomendes.lorc.rest.repository.LorcCardReactiveRepository. o.s.b.f.s.DefaultListableBeanFactory: автоматическое подключение по типу из beaame «lorcReactiveService» через конструктор в beaamed «lorcCardReactiveRepository». o.s.b.f.s.DefaultListableBeanFactory: автоматическое подключение по типу от beaame 'lorcReactiveController' через конструктор к beaamed 'lorcReactiveService' o.s.b.f.s.DefaultListableBeanFactory : Создание общего экземпляра одноэлементного bean-компонента 'lorcRouter' o.s.b.f.s.DefaultListableBeanFactory : Создание общего экземпляра одноэлементного bean-компонента 'lorcCardHandler' o.s.b.f.s.DefaultListableBeanFactory: автоматическое подключение по типу от beaame 'lorcCardHandler' через конструктор к beaamed 'lorcCardReactiveRepository' o.s.b.f.s.DefaultListableBeanFactory: автоматическое подключение по типу от beaame 'lorcRouter' через конструктор к beaamed 'lorcCardHandler' o.s.b.f.s.DefaultListableBeanFactory: создание общего экземпляра одноэлементного bean-компонента «globalExceptionHandler». o.s.b.f.s.DefaultListableBeanFactory: создание общего экземпляра одноэлементного bean-компонента getCardListByRoute.
Сервисный звонок
[Службы отдыха Lorcana] [nio-8080-exec-1] o.s.web.servlet.DispatcherServle: GET "/lorc", параметры = {} [Службы отдыха Lorcana] [nio-8080-exec-1] o.s.w.s.handler.SimpleUrlHandlerMapping: сопоставлено с ResourceHttpRequestHandler [путь к классам [META-INF/resources/], путь к классам [resources/], путь к классам [static/], путь к классам [public/] , Контекст сервлета [/]] [Lorcana Rest Services] [nio-8080-exec-1] o.s.w.s.r.ResourceHttpRequestHandl: найден ресурс [Службы отдыха Lorcana] [nio-8080-exec-1].w.s.m.s.DefaultHandlerExceptionResolver: решено [org.springframework.web.servlet.resource.NoResourceFoundException: нет статического ресурса lorc.] [Службы отдыха Lorcana] [nio-8080-exec-1] o.s.web.servlet.DispatcherServle: завершено 404 NOT_FOUND [Lorcana Rest Services] [nio-8080-exec-1] o.s.web.servlet.DispatcherServle: отправка «ОШИБКИ» для GET «/error», параметры = {} [Службы отдыха Lorcana] [nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping: сопоставлено с org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#errorHtml(HttpServletRequest, HttpServletResponse) [Службы отдыха Lorcana] [nio-8080-exec-1] o.s.w.s.v.ContentNegotiatingViewResolver: выбран «текст/html» с учетом [текст/html, текст/html; q=0,8] [Lorcana Rest Services] [nio-8080-exec-1] o.s.web.servlet.DispatcherServle: выход из отправки «ОШИБКА», статус 404 [Lorcana Rest Services] [localhost:27017] org.mongodb.driver.cluste: обновление описания кластера t{type=STANDALONE, server=[{address=localhost:27017, type=STANDALONE, roundTripTime=81,2 мс, состояние=CONNECTED} ] [Lorcana Rest Services] [localhost:27017] org.mongodb.driver.cluste: проверка статуса localhost:27017 [Lorcana Rest Services] [localhost:27017] org.mongodb.driver.cluste: обновление описания кластера t{type=STANDALONE, server=[{address=localhost:27017, type=STANDALONE, roundTripTime=12,2 мс, состояние=CONNECTED} ] [Lorcana Rest Services] [localhost:27017] org.mongodb.driver.cluste: проверка статуса localhost:27017 [Службы отдыха Lorcana] [nio-8080-exec-3] o.apache.coyote.http11.Http11Processo: ошибка анализа заголовка HTTP-запроса java.io.EOFException: ноль в org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1293) ~[tomcat-embed-core-10.1.24.jar:10.1.24] в org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1181) ~[tomcat-embed-core-10.1.24.jar:10.1.24] в org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:789) ~[tomcat-embed-core-10.1.24.jar:10.1.24] в org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:348) ~[tomcat-embed-core-10.1.24.jar:10.1.24] в org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:262) ~[tomcat-embed-core-10.1.24.jar:10.1.24] в org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.24.jar:10.1.24] в org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) ~[tomcat-embed-core-10.1.24.jar:10.1.24] в org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.24.jar:10.1.24] в org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.24.jar:10.1.24] в org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.24.jar:10.1.24] в org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.24.jar:10.1.24] в org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.24.jar:10.1.24] в java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Проблема заключалась в дополнительной зависимости от pom.xml.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webflux</artifactId>
<version>6.1.8</version>
</dependency>
Я попробовал ту же настройку в другом проекте, и после успеха я проверил каждую зависимость и посмотрел, какие из них являются дополнительными. После удаления указанной выше зависимости функциональная конечная точка работала как положено.
включите журналы DEBUG и включите их ПОЛНОСТЬЮ в свой вопрос, чтобы мы могли видеть, что вы делаете.