java - 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(未找到)。
解决方案
JAX-RS
是Java EE
如何编码 REST api 的规范。然后有几个库已经实现了上述规范,例如Jersey
或restEasy
. 在构建 Java EE 应用程序时,您需要这些库之一来构建一个 rest api。
spring-web
Spring为非响应式应用程序和响应式应用程序构建了自己的构建 rest api 的方式spring-webflux
。
Jersey
并且restEasy
(据我所知)仅在您构建非反应式应用程序时才有效。
为了使您的代码正常工作,您需要删除:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
Jersey
是JAX-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 应用程序。
我建议您阅读以下部分:
推荐阅读
- web-scraping - Mechanize 中的输入标签是否有等效的 browser.select_form?
- amazon-web-services - Pyspark 作业因 vcpus 过多而冻结
- python - 在 python 中保留 90 天
- android - 如何在 SortedList 中按特定条件查找/删除项目?
- java - 为什么我的模糊功能将值向下和向右移动?
- mysql - MySql 用 IF 语句创建记录
- python - discord.py cogs 出现错误
- excel - 根据2个单元格之间的差异插入n行
- pandas - 解析 str 以在 pandas 中浮动的最佳方法
- reactjs - 如何输入文件上传的输入参考