当前位置: 首页 > 知识库问答 >
问题:

无法访问Springboot Rest web项目中的endpointURL

闻人仲渊
2023-03-14

我在eclipse中初始化了一个SpringBoot Rest,并使其成为一个动态Web项目。遵循了三轮胎原则,并在控制器类中声明了endpointURL。项目部署良好,但一旦我尝试访问返回404错误的endpoint。请参阅下面的示例。二手编译器-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);
}}

共有1个答案

佟高澹
2023-03-14

如果您将某个类注释为< code>@Configuration,那么您就是在告诉spring这个类是< code>@Beans的一个源。因此,不应在同一个类中包含< code > @ request mapping /< code > @ rest controller /< code > @ get mapping 。将这些项目的相关部分分离到另一个类中。

我也很确定对于你的设置,你不需要重复添加@EnableAutoConfiguration,并且可能只需要它(如果有的话)在根@SpringBootApplication注释旁边(也可能在任何@SpringBootTest旁边,但不要引用我的话)。如果你摆脱它们并阅读你得到的任何异常,你应该处于更好的位置来让它工作。

在MVC风格的应用程序中(不考虑语言),典型的命名约定是所有请求都由名为“BlahBlah”的类处理...控制器”,处理传入的HTTP请求。

所以总而言之,为了让它工作,我会从以下几点开始:

    < li >删除以< code > @ enable auto configuration 开头/等于的所有行 < li >将< code > pmadvancedcontroller 重命名为< code > pmadvancedconfiguration ,并仅在其中保留方法< code>addViewControllers。 < li >删除< code>@RestController

编辑:

如果您将以下内容放入一个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岁。

 类似资料:
  • 我是个彻头彻尾的Jenkins noob,所以如果我错过了一些显而易见的事情,我会提前道歉! 我正在使用Visual Studio 2010构建一个intranet web应用程序,并使用AnkhSVN将更改提交到存储在运行Visual SVN server的服务器上的存储库中。 由于预算限制,该服务器还充当我们的web服务器,并运行Jenkins。它连接到我们的内部网络,但没有外部互联网接入,所

  • 我正在尝试访问。我已经使用ebconfig将json文件下载到/tmp/目录,以在S3上存储私钥。 但它给了我以下错误 错误:EACCES:权限被拒绝,打开“/tmp/firebaseadminsdk”。json’ 文件中有一段说 第二个条目使用S3Auth身份验证方法从指定的URL下载私钥,并将其保存到/etc/pki/tls/certs/server。钥匙然后,代理服务器可以从此位置读取私钥,

  • 更新日期:2020年2月20日 总结 Azure 开发运营管道生成无法从“项目”下的专用源中找到 NuGet 包。 我们的 Azure DevOps 环境 在Azure,我们有自己的公司“空间”:dev.azure.com/OurCompany 在此之下,我们有多个项目,例如,想象一下这三个项目: 绿色:包含特定类型的应用程序 蓝色:这包含不同类型的应用程序 红色:这包含我们的“通用”帮助程序代码

  • 我在基本项目中导入了一个项目作为库,但我无法访问基本项目中导入库中的类文件。请原谅我的问题是愚蠢的,我是比较新的android工作室步骤我做的- null Build.Gradle(:App)(主项目) Build.Gradle(:TF_Lite)(作为库导入的项目)

  • 问题内容: 我有一个像这样的json块: 我如何获取此令牌包含的所有关键项目。例如,从上面的代码中,我希望具有“ ADRESS_LOCATION”,“ LOCATION”,“ FLOOR_NUMBER”和“ self”。 问题答案: 您可以将转换为,然后使用方法获取对象属性的列表。从那里,您可以轻松获得名称。 像这样: 输出:

  • 我在我的android studio项目中遇到以下错误: 依赖项{compile fileTree(目录:“libs”,include:['*.jar'])androidTestCompile(“com.android.support.test.espresso:espresso-core:2.2.2”,{exclude组:“com.android.support”,module:“support