我已经在eclipse中初始化了SpringBoot Rest,并使其成为一个动态Web项目。遵循三轮胎原则,并且在控制器类中声明了端点URL。该项目可以很好地部署,但是一旦我尝试访问返回404错误的端点。请参考下面的例子。 二手编译器-Maven和服务器-apache tomcat 9.0
MainClass.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
答案 0 :(得分:1)
如果将某些内容注释为@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岁。