springboot 对于不存在的URI,发生页面404 进行异常处理

目录

前言:

1. springboot做了默认的URI找不到的处理

 2. 可以在yml配置文件中加入下面内容

3.  统一异常捕获


前言:

因为纯后端项目,需求中有需要对URI没有的情况,进行错误码返回。

所以加上了这个页面404的异常捕获~

不得不说,springboot 是真的方便

至于全局异常处理,之前有写过:

https://blog.youkuaiyun.com/pmdream/article/details/95969267


1. springboot做了默认的URI找不到的处理

{
  "timestamp": 1570505276787,
  "status": 404,
  "error": "Not Found",
  "message": "No message available",
  "path": "/detect/xxx"
}

 2. 可以在yml配置文件中加入下面内容

#出现错误时, 直接抛出异常(便于异常统一处理,否则捕获不到404)
   mvc:
     throw-exception-if-no-handler-found: true
#不要为工程中的资源文件建立映射
   resources:
     add-mappings: false

3.  统一异常捕获

@ExceptionHandler(value = {NoHandlerFoundException.class})
    @ResponseBody
    public Result noHandlerFoundException(HttpServletRequest req, Exception e) {
        Result result = new Result(RespCode.ERROR_6_.getCode(), RespCode.ERROR_6_.getMsg(), null);
        errorLog(req, e , result);
        return result;
    }

就是捕获到这个NoHandlerFoundException 就可以抛出URI没有的错误码~

### Spring Boot Whitelabel Error Page 404 的解决方案 Spring Boot 中出现 `Whitelabel Error Page` 和 `HTTP Status 404` 是常见的错误之一,通常表明应用程序无法找到匹配的请求映射。以下是可能导致该问题的原因以及对应的解决方法: #### 可能原因及解决办法 1. **控制器类未被扫描到** 如果控制器所在的包在主应用启动类所在包及其子包范围内,则 Spring Boot 会自动扫描并加载这些控制器类。可以通过调整包结构或将组件扫描范围扩大来解决问题[^5]。 ```java @SpringBootApplication(scanBasePackages = {"com.example", "other.package"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 2. **缺少视图解析器配置** 若使用的是基于 Thymeleaf 或 JSP 的视图渲染技术,而未正确配置视图解析器,可能会导致页面到的情况。确保已引入相应的依赖项,并在配置文件中启用支持[^3]。 对于 Thymeleaf: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> ``` 配置示例: ```properties spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html ``` 3. **请求路径匹配** 请求 URL 路径与控制器中的定义符也会引发此问题。务必确认浏览器访问地址是否完全一致,包括大小写和斜杠位置等细节。 4. **RESTful API 返回 JSON 数据而非 HTML 页面** 使用了 `@RestController` 注解而是普通的 `@Controller` 导致返回数据形式符合预期。如果希望展示网页内容,请改回标准控制层声明方式[^2]。 修改前: ```java @RestController public class HelloController { @GetMapping("/hello") public String helloWorld(){ return "Hello World!"; } } ``` 修改后: ```java @Controller public class HelloController { @GetMapping("/hello") public String helloWorld(Model model){ model.addAttribute("message","Hello World!"); return "index"; } } ``` 5. **静态资源放置当** 将前端所需的 CSS/JS 文件存放在默认公共资源目录之外的地方也可能引起加载失败现象。按照约定俗成的做法把它们放到 src/main/resources/static 下即可避免此类状况发生[^4]。 6. **跨域资源共享(CORS)** 当前后端分离部署时,由于浏览器的安全策略限制,默认情况下允许同源之间的 AJAX 请求通信。此时需开启 CORS 支持以允许特定域名下的客户端发起调用操作[^1]。 --- ### 总结 通过以上分析可知,“Whitelabel Error Page”主要是因为服务器未能成功处理指定 URI 所造成的响应异常情况。针对具体场景逐一排查上述提到的各种可能性之后应该能够有效定位根本原因进而彻底修复该缺陷。 ```java @Controller public class HomeController { @RequestMapping("/") public String home() { return "home"; // 映射至 templates/home.html } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值