首页 > 解决方案 > Spring Webflux 返回 404 ( Not Foud )

问题描述

我必须使用 spring Webflux 以反应方式保存一些值。但是当我发送请求时,会返回 404 状态作为响应。

pom.xml

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-jersey</artifactId>
 </dependency>
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-webflux</artifactId>
 </dependency>

EmpController 类

@RestController
@RequestMapping("/emp")
public class EmpController {

    private EmployeeRepository empRepo;

    @Autowired
    public EmpController(EmployeeRepository empRepo)
    {
        this.empRepo=empRepo;
    }

    @PostMapping("/save")
    @Consumes({MediaType.APPLICATION_JSON})
    public void saveEmp(@RequestBody Mono<Employee> emp)
    {
             emp.subscribe(e-> {
                 e.setDate(new Date());
                 empRepo.saveEmp(e);
             });
    }
}

当我通过 PostMan 发送请求时,返回 404(未找到)。

在此处输入图像描述 在此处输入图像描述

标签: javaspringspring-bootreactive-programmingspring-webflux

解决方案


JAX-RSJava EE如何编码 REST api 的规范。然后有几个库已经实现了上述规范,例如JerseyrestEasy. 在构建 Java EE 应用程序时,您需要这些库之一来构建一个 rest api。

spring-webSpring为非响应式应用程序和响应式应用程序构建了自己的构建 rest api 的方式spring-webflux

Jersey并且restEasy(据我所知)仅在您构建非反应式应用程序时才有效。

为了使您的代码正常工作,您需要删除:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jersey</artifactId>
</dependency>

JerseyJAX-RS. 它在 Java EE 中用于构建 Java EE 样式的 rest api。您正在构建一个反应式应用程序,使用 Spring Webflux,它有自己的构建 REST api 的方式。

Spring 不是 Java EE 应用程序。当您添加该依赖项时,spring 假设您想要构建一个 Spring 应用程序但不使用 Spring 内置的 REST api 函数和注释等,因此它没有注册您的代码,您使用 Springs 编写的构建 rest apis 的方式.

它假设您要以“球衣方式”编写 REST api,如果您使用球衣,则需要手动注册您的 api 类。而且(据我所知)Jersey 仅适用于非 webflux 应用程序。

这主要是基础知识,如果你不明白为什么我建议你在尝试 webflux 之前阅读并构建一个常规的 spring boot 应用程序。

我建议您阅读以下部分:

反应式编程,Reactor 入门

Baeldung Webflux

构建反应式 Webflux 应用程序

春季启动 Webflux


推荐阅读