java - 无法在 Springboot Rest web 项目中访问端点 URL
问题描述
我已经在 Eclipse 中初始化了一个 SpringBoot Rest 并使其成为一个动态 Web 项目。遵循 3-tire 原则,并在控制器类中声明端点 URL。该项目部署良好,但一旦我尝试访问返回 404 错误的端点。请参考以下示例。使用的编译器 - Maven 和服务器 - apache tomcat 9.0
主类.java
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
@SpringBootApplication
@Configuration
public class PmsAdvanced extends SpringBootServletInitializer implements
WebMvcConfigurer{
public static void main(String[] args) {
SpringApplication.run(PmsAdvanced.class, args);
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("/index.jsp");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
}
}
示例控制器类
@RestController
@EnableWebMvc
@RequestMapping("/test")
public class PmsAdvancedController implements WebMvcConfigurer {
@PostMapping("/PMS")
public String sayHello(@RequestParam(value = "myName", defaultValue = "divi") String name) {
return String.format("Hello %s!", name);
}
@GetMapping("/PMSA")
public String sayAge(@RequestParam(value = "age", defaultValue = "100") String age) {
return String.format("I'm %s!", age);
}}
我一直在尝试访问的 URL - http://localhost:8081/pms_advance_be/test/PMSA
解决方案
如果您注释某些内容,@Configuration
那么您就是在告诉 spring 该类是@Beans
. 因此,您不应该在同一个类中拥有@RequestMapping
// @RestController
。@GetMapping
将这些项目的相关部分分成另一个类。
我也很确定您的设置不需要重复添加@EnableAutoConfiguration
,并且可能只需要它(如果有的话)与根@SpringBootApplication
注释一起(也可能与任何注释一起@SpringBootTest
,但不要在此引用我的话)。如果您摆脱它们并阅读您返回的任何异常,您应该处于更好的位置来使其正常工作。
在 MVC 风格的应用程序中(无论语言如何),典型的命名约定是所有请求都由名为“BlahBlah... Controller ”的类处理,处理传入的 HTTP 请求。
因此,总而言之,要使其正常工作,我将从:
- 删除所有开始/等于的行
@EnableAutoConfiguration
- 仅将方法重命名
PmsAdvancedController
为PmsAdvancedConfiguration
并保留addViewControllers
在其中。 - 移除
@RestController
&@RequestMapping("/test")
从PmsAdvancedConfiguration
- 创建一个新类
PmsAdvanceController
并向其中添加@RequestMapping("/test")
标记的注释方法@GetMapping
和@PostMapping
@RestController
结合@Controller
和@ResponseBody
- 这是没有必要的。删除。- 我看不到你试图用它做什么,
WebMvcConfigurer
但我假设你正在遵循某种例子,从它的“Hello Worldiness”来看......查看其他在线示例和它应该使用的文档以下两个注解:@EnableWebMvc
以及@Configuration
所有其他注解都可以删除。
编辑:
如果您将以下内容放入单个 Java 文件并运行main
它可以工作的方法:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@SpringBootApplication
public class PmsAdvanced extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(PmsAdvanced.class, args);
}
}
@Configuration
class PmsAdvancedConfiguration implements WebMvcConfigurer {
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("/index.jsp");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
}
}
@RestController
@RequestMapping("/test")
class PmsAdvancedController {
@PostMapping("/PMS")
public String sayHello(@RequestParam(value = "myName", defaultValue = "divi") String name) {
return String.format("Hello %s!", name);
}
@GetMapping("/PMSA")
public String sayAge(@RequestParam(value = "age", defaultValue = "100") String age) {
return String.format("I'm %s!", age);
}
}
测试:
curl -X GET http://localhost:8080/test/PMSA?age=30
或在浏览器中访问:http://localhost:8080/test/PMSA?age=30
输出:
I'm 30!
注意:我实际上不是 30 岁。
推荐阅读
- angular - 如何解决spring boot和angular中的org.springframework.web.bind.MissingServletRequestParameterException错误?
- python - Python的ElementTree,如何在段落中创建链接
- javascript - 为什么我的 json 日期字符串对 date-fns 无效?
- node.js - 无法读取未定义的属性“toDateString”
- javascript - 反应并获取/填充多个模型,无法在返回前解决承诺
- c++ - 为什么 x+0 和 x|0 有不同的结果?
- javascript - 移动设备中不可点击的锚标记
- material-ui - 在 CreateTheme V5 中添加新的组件道具
- python - 如何对具有特殊因变量 Y 的每家公司进行回归
- pine-script - 一天中不同时间的相对交易量