1

我正在尝试使用 spring web 响应式创建一个 RESTful 服务。我有一个具有通常结构的控制器

package com.hcl.bc4sc.server.controller;
...
@RestController
@RequestMapping("/api/v1/registrar/enroll")
public class ControllerV1RegistrarEnroll {
...
    @RequestMapping(method = RequestMethod.POST, consumes = "application/json")
    public Mono<ResponseEntity> registrarEnrollPost(@RequestBody final UserInfo userInfo) {
...

我正在使用@ComponentScan 让控制器像这样注册

@Configuration
@ComponentScan(basePackages = "com.hcl.bc4sc.server.controller")
public class ServerInitialization {
...

我的 ServerInitialization 类中的各种 bean 正在被定义,所以我知道 Spring 正在处理 ServerInitialization。

我想知道问题是否可能与我启动 Spring 和 HttpServer 的方式有关:

public static void boot() throws TimeoutException {
    final GenericApplicationContext context
            = new AnnotationConfigApplicationContext(DelegatingWebReactiveConfiguration.class,
                                                     ServerInitialization.class);
    final HttpHandler handler = DispatcherHandler.toHttpHandler(context);
    final ServerConfig config = context.getBean(ServerConfig.class);
    applicationContext = Optional.of(context);

    // Reactor Netty
    final Function<HttpChannel, Mono<Void>> adapter
            = new ReactorHttpHandlerAdapter(handler);
    final HttpServer server = HttpServer.create(config.getHost(), config.getPort());
    httpServer = Optional.of(server);
    server.ws("", adapter).startAndAwait();
}

当我尝试对此进行测试时,我使用 url http://localhost/api/v1/registrar/enroll。它返回一个 404。

如果我应该以不同的方式开始我的服务,有人可以指点我一个很好的完整工作示例吗?

4

1 回答 1

0

根据您提到的代码,您的控制器位于

com.hcl.bc4sc.server.config

但是您正在执行的扫描是针对包裹的:

com.hcl.bc4sc.server.controller

你应该首先解决这个歧义。并告知它是否仍然失败。启动日志会有所帮助。

于 2017-01-08T00:58:34.157 回答