springboot访问请求404的原因及解决办法

在使用Spring Boot开发应用程序时,有时可能会遇到访问请求出现404错误的情况,即请求的资源未找到,这篇文章主要给大家介绍了关于springboot访问请求404的原因及解决办法,需要的朋友可以参考下

可能出现的原因

1.你请求的URL路径不对,比如说你请求的路径是/usr/list,GET方法,但是你UserController上面的RequestMapping是这个样子:@RequestMapping(“user”),有可能哈

2.前端的请求时GET方法,后端对应的处理函数的方法是非GET方法

3.Controller和RestController注解混用了,两个中删除一个试试

4.访问的是静态资源,那么查看是否配置好了静态资源,就是把静态资源放到Resources下面的static文件夹中,也可以通过配置类来自定义存放路径

下面是通过配置类的方式,来配置静态资源存放的路径

我的静态资源是直接放在Resources下面的,新建一个类,类名随意

继承WebMvcConfigurationSupport重写addResourceHandlers方法
在类

@Configuration
@Slf4j
public class WebMvcConfig extends WebMvcConfigurationSupport {
    /**
     * 配置静态资源映射
     *
     * @param registry
     **/
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        log.info("开始进行静态资源映射");
        //将路径中包含backend的请求映射到backend文件夹下
//这句话的意思是,只要请求的是/backend下面的文件都映射到Resources下面的backend文件夹下面,classpath:
        registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
//上同        
        registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
    }
    }

上面加上@Configuration注解

5.你的Controller类没有被扫描到,这种情况一般是启动类在一个包里面

 

解决办法:

1、把你的启动类从包里面拿出来,放到外面,如图所示

 

2、用和MapperScan和scanBasePackages来指明需要扫描的包

如图所示

 

3、项目中有多个SpringBootServletInitializer子类

此类问题表现是,项目按模块划分,多个模块内包含Controller。在开发调试阶段正常,单独运行每个模块也正常;使用tomcat部署后,总会随机出现一些模块的Controller访问不了的情况。

这种情况,多是因为每个模块都创建了SpringBootServletInitailizer子类。

解决办法就是只保留入口模块的SpringBootServletInitialzer子类即可

补充:

若是线上部署阶段排错思路

1.确定资源确实是存在的

2.随机测试几个接口,看看是否都是404。

  • 如果都是404,很可能是nginx配置错误
  • 如果部分404,且是按模块404,查看项目中是否有多个SpringBootServletInitializer子类

总结 

到此这篇关于springboot访问请求404的原因及解决办法的文章就介绍到这了

### Spring Boot 404 错误解决方案 当遇到 `Spring Boot` 中的 404 错误时,通常是因为请求路径未被正确映射到控制器方法或者项目的配置存在问题。以下是可能导致该问题的原因以及对应的解决办法: #### 可能原因及解决措施 1. **缺少 `@SpringBootApplication` 注解** 如果应用程序类上没有加上 `@SpringBootApplication` 注解,则可能无法扫描到组件或控制器类。因此需要确保主程序类上有此注解并将其放置在包结构的顶层位置[^1]。 2. **Controller 类定义不正确** 确认所有的 Controller 是否都标注了合适的注解(如 `@RestController`, `@Controller`),并且其内部的方法是否通过诸如 `@GetMapping`, `@PostMapping` 这样的 HTTP 方法映射进行了正确定义。 3. **Maven 或 Gradle 的依赖缺失** 若项目中涉及 Web 功能却遗漏了必要的 Starter 依赖项,比如 `spring-boot-starter-web`,则会引发资源不可访问的情况。对于标准 RESTful API 开发而言,应该引入如下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 4. **静态文件路径设置不当** 默认情况下,Spring Boot 将公共资源存放在 `/src/main/resources/static/` 下面;如果自定义了其他目录而忘记调整配置也可能造成页面找不到的现象。可以检查 application.properties 文件中的 spring.resources.static-locations 属性是否有修改过,并验证实际存储地址是否匹配。 5. **集成第三方技术时忽略额外配置** 当扩展功能至像 WebSocket 这样更复杂的领域时,除了基本框架之外还需要增加特定的支持库。例如,在实现基于消息推送的服务之前需添加 websocket starter 并完成相应 Bean 初始化工作[^2]: ```java import org.springframework.context.annotation.Bean; import org.springframework.web.socket.server.standard.ServerEndpointExporter; @Configuration public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } } ``` 6. **URL 路径拼写错误** 检查浏览器输入 URL 和服务器端处理逻辑之间是否存在大小写差异或其他字符不符之处。 7. **嵌入式 Tomcat 配置冲突** 假设手动设置了 Servlet 容器参数但与默认行为相悖的话也容易触发异常状态码返回现象。此时建议查看文档重新评估相关选项设定值合理性。 综上所述,针对上述每种可能性逐一排查即可定位具体根源所在进而采取针对性修正动作来消除此类状况的发生几率。 ```java // 示例代码片段展示如何创建简单的 Rest 控制器 @RestController @RequestMapping("/api/v1/example") public class ExampleController { @GetMapping("/{id}") public String getExample(@PathVariable Long id){ return "You requested example with ID:" + id ; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值