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

无法使用Spring Boot自动配置访问REST控制器

颛孙兴旺
2023-03-14

我试图创建一个简单的REST服务与Spring Boot遵循本教程。webapp文件夹(index.html)中的“hello world”html文件正在http://localhost:8080/my-rest-app/上打开(我创建了一个Maven-Web-App,因为我希望有一个服务的“欢迎页面”)。但是,如果我试图访问http://localhost:8080/my-rest-app/user上的REST服务,我会得到一条404消息。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>service</groupId>
    <artifactId>my-rest-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>my-rest-app</name>

    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
package service.my.rest.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
//@ComponentScan({"service.my.rest.app", "service.my.rest.app.controller"})
//@ComponentScan(basePackageClasses = UserController.class)
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

UserController.java:

package service.my.rest.app.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {

    @RequestMapping(method = RequestMethod.GET)
    public String getUser() {
        return "Hello";
    }

}

我错过了什么?服务的URL是否错误?我在某个地方读到Spring Boot REST服务的上下文路径总是/,这意味着我必须通过http://localhost:8080/my-rest-app/访问服务,但这不起作用(没有index.html)。用server.contextpath=/my-rest-appserver.port=8080更改application.properties中的上下文路径也无济于事。

共有1个答案

赵钊
2023-03-14

问题在于构建和部署过程。谢谢你@Chrylis的暗示。

package service.my.rest.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan({"service.my.rest.app"})
public class Application extends SpringBootServletInitializer {

    private static Class<Application> application = Application.class;

    public static void main(String[] args) {
        SpringApplication.run(application, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(application);
    }

}

我不得不扩展我的应用程序来构建和部署一个war文件,因为Spring Boot实际上是为生成一个JAR而设计的。

 类似资料:
  • 在使用Springboot创建API以及理解bean的工作方式方面有点困难。 我有三门课,我尽可能简化了它们; 我的问题是,在控制器中,我没有从创建的ClassA对象myClass中获取neededVar,实际上我不确定我得到了什么。 我也尝试过这样做,得到了类似的结果。 如果有人能为我指出正确的方向,将neededVar从应用程序中的实例化ClassA中获取到我的rest控制器(以及随后我将创建

  • 4.1 根据条件的自动配置 @conditional是基于条件的自动配置,一般配合Condition接口一起使用,只有接口实现类返回true,才装配,否则不装配. 用实现了Condition接口的类传入@Conditional中 @Conditional可以标记在配置类的方法中,也可以标记在配置类上.标记的位置不同,作用域不同. @Conditional可以传入多个实现了condition接口的类

  • 本文向大家介绍SpringBoot配置web访问H2的方法,包括了SpringBoot配置web访问H2的方法的使用技巧和注意事项,需要的朋友参考一下 【前情提要】最近开始搭建博客,在本地调试的时候使用的数据库是h2,但是调试的时候需要查看数据库,本文也由此而来。 下面是我用到的方法: 使用IDEA的Database连接工具,具体操作方法就是按照要求配置连接url,用户名和密码即可。具体操作见下图

  • 我在eclipse中初始化了一个SpringBoot Rest,并使其成为一个动态Web项目。遵循了三轮胎原则,并在控制器类中声明了endpointURL。项目部署良好,但一旦我尝试访问返回404错误的endpoint。请参阅下面的示例。二手编译器-Maven和服务器-apache tomcat 9.0 主类.java } 示例控制器类

  • 本任务将演示如何通过使用Istio认证提供的服务账户,来安全地对服务做访问控制。 当Istio双向TLS认证打开时,服务器就会根据其证书来认证客户端,并从证书获取客户端的服务账户。服务账户在source.user的属性中。请参考Istio auth identity了解Istio中服务账户的格式。 开始之前 根据quick start的说明在开启认证的Kubernetes中安装Istio。注意,应

  • 下面的任务展示了如何使用Kubernetes标签来控制对一个服务的访问。 开始之前 在Kubernetes上遵循安装指南部署 Istio。 部署BookInfo 示例应用。 设置基于版本的应用路由,用户“jason”对reviews服务的访问会被指向 v2 版本,其他用户则会访问到 v3 版本。 istioctl create -f samples/bookinfo/kube/route-ru