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

本文详细探讨了SpringBoot开发中遇到404错误的可能原因,包括URL路径错误、方法不匹配、Controller注解冲突、静态资源配置和Controller扫描问题。并给出了相应的解决方法,以及线上部署时的排查建议。

在使用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 和 401 错误的原因及解决方案 #### 一、错误原因分析 当在 Spring Boot 应用中遇到前端页面返回 `404` 或 `401` 的情况时,可能涉及以下几个方面: 1. **资源路径未正确加载** 如果静态资源(HTML 文件或其他前端文件)放置的位置不正确,则可能导致浏览器无法找到对应的资源并抛出 `404 Not Found` 错误。默认情况下,Spring Boot 只会自动扫描位于 `/src/main/resources/static/`, `/src/main/resources/public/`, `/src/main/resources/META-INF/resources/` 等特定目录下的静态资源[^1]。 2. **控制器映射问题** 当请求的 URL 路径未能匹配到任何定义好的 Controller 方法时,也会触发 `404` 错误。这可能是由于方法签名中的参数绑定失败或者路径设置有误引起的。 3. **权限不足引发的 401 Unauthorized** 若应用集成了安全框架(如 Spring Security),而当前访问该接口或页面的用户缺少必要的角色授权,则会被拒绝访问,并收到状态码为 `401` 的响应消息[^4]。 #### 二、具体解决办法 ##### 静态资源配置调整 确保所有的 HTML 页面以及 CSS, JavaScript 文件都存放在上述提到的标准位置之一内。如果自定义了额外的存储地址,则需通过修改 application.properties (或 yml) 中的相关属性来指定新的查找范围: ```properties spring.resources.static-locations=classpath:/custom_static/ ``` 对于 FreeMarker 这样的模板引擎来说,还需要单独引入依赖项以便正常渲染视图内容[^3]: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> ``` ##### 控制器逻辑修正 仔细检查每一个 @RequestMapping 注解所关联的具体实现部分是否存在语法错误或者是业务处理上的漏洞;另外也要注意 GET 请求与 POST 提交方式之间的区别对待。 针对某些特殊场景下可能出现跨域资源共享(CORS)限制而导致的功能失效现象,可以在全局范围内开启 CORS 支持或是仅允许来自可信源服务器发起调用操作。 关于如何配置数据库连接字符串等内容则不属于本主题讨论范畴之内。 ##### 处理安全性相关事宜 如果是因启用 spring-security 导致登录后的普通浏览行为被拦截成未经授权的状态(`HTTP Status Code:401`) ,那么应该重新审视现有的认证机制设计思路 。比如确认是否已经设置了免验证白名单规则等等: ```java @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/public/**").permitAll() // 对公共资源开放匿名访问权 ... } ``` 以上就是有关于解决 spring boot 开发过程中常见的两类 HTTP 错误状况的一些基本指导方针。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值