springboot实现修改请求状态404改为200

 更新时间:2023年07月19日 10:34:08   作者:一盏红烛,一杯烧酒  
这篇文章主要介绍了springboot实现修改请求状态404改为200方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

springboot修改请求状态404改为200

描述

前端请求 localhost:8090/hello,而我后端没有 /hello 对应的 url,正常请求的话会报错 404。

我这里想修改请求结果,改为 200 加自定义结果返回

解决办法

@Order(0)
@WebFilter(value = "/*")
@Component
public class EntranceFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
       // 请求放行
        chain.doFilter(request,wrapper);
        try{
                Class clazz=ResponseFacade.class;
                Field field=clazz.getDeclaredField("response");
                field.setAccessible(true);
                Object o = field.get(((ResponseFacade) response));
                //  修改状态,默认情况 放过调用链执行后 response.setStatus 失败
                ((Response)o).setAppCommitted(false);
                ((Response)o).setSuspended(false);
            }
            catch (Exception e){
                logger.error("========> 反射获取response失败");
            }
        // =====>  reset() 方法可以清空缓冲区以及重置状态码 200   但是这里又需要依赖前面的try模块,需要先设置他们
        //  =====>  还需要设置 内容类型,这块也被重置了
        response.reset();
        response.setContentType("text/html;charset=UTF-8");
        response.getOutputStream().write("Don't ask at will".getBytes());
        response.flushBuffer();
    }
}

我这里是使用了 过滤器,controller中也是类似的。

这里需要主要,如果没有先放行 即执行chain.doFilter(request,wrapper);,其实不用这么麻烦。

可以直接写

@Order(0)
@WebFilter(value = "/*")
@Component
public class EntranceFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        ((HttpServletResponse) response).setStatus(200);
        response.getOutputStream().write("Don't ask at will".getBytes());
        response.flushBuffer();
    }
}

springboot项目404排错思路

错误页面展示

报错界面

翻译:Whitelabel错误页面此应用程序没有针对/error的显式映射,因此您将其视为一个回退。

出现意外错误(类型=未找到,状态=404)。

排错思路

出现404根本原因是:浏览器找不到输入的URL地址

首先写个能访问成功的接口举例:

举例接口

在浏览器输入:localhost:8080/SpringBoot/test 可以正常访问

访问成功

若出现404问题,接下来进行排错

首先需要检查输入的URL是否有漏写情况,能否对应SpringBoot项目的接口,这里不做分析。

(1)端口号输入错误

在这里插入图片描述

启动的控制台显示是8080端口启动 所以浏览器输入的URL地址也应该是:localhost:8080/XXX/XXX这里的端口号可以在application.yml配置文件中更改

(2)接口URL地址未区别大小写

接口的地址是严格区分大小写的 转而言之:localhost:8080/SpringBoot/test 与localhost:8080/springboot/test 两者是不一样的地址

(3)controller层接口映射地址前是否漏写 " / " 斜杠

在这里插入图片描述

(4)Controller层注解应该是@RestController 而不是 @Controller

在这里插入图片描述

@Controller与@RestController两者区别注解区别:

@Controller注解

@Controller 是Spring框架提供的注解。

@Controller标识的类,该类代表控制器类(控制层/表现层)。之后分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。(@RequestMapping 用来映射请求,也就是通过它来指定控制器可以处理哪些URL请求)

@RestController注解

  • @RestController 其实也是Spring框架提供的注解。
  • @RestController 注解相当于 @Controller + @ResponseBody 合在一起的作用。

所以用@RestController 注解类的方法返回值,默认是json对象,也就是相当于@Controller里面的方法上添加@ResponseBody,如果方法返回值,需要跳转,那么方法的返回类型必须是View 或者ModelAndView。

(5) SpringBoot的启动类与Controller包不在同一个目录下

SpringBoot的启动类(类名上面有@SpringBootApplication注解 )解决方案就是把启动类和Controller包放在同目录下。

如下图:必须在同级目录

在这里插入图片描述

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java检查日期字符串是否合法的方法总结

    Java检查日期字符串是否合法的方法总结

    后端接口在接收数据的时候,都需要进行检查。检查全部通过后,才能够执行业务逻辑。本文总结了四个Java检查日期字符串是否合法的方法,感兴趣的可以了解一下
    2022-10-10
  • Java操作XML转JSON数据格式详细代码实例

    Java操作XML转JSON数据格式详细代码实例

    在Java中我们可以使用一些现成的库来实现XML到JSON的转换,下面这篇文章主要给大家介绍了关于Java操作XML转JSON数据格式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • springboot 异步调用的实现方法

    springboot 异步调用的实现方法

    这篇文章主要介绍了springboot 异步调用的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • SpringMVC HttpMessageConverter报文信息转换器

    SpringMVC HttpMessageConverter报文信息转换器

    ​​HttpMessageConverter​​​,报文信息转换器,将请求报文转换为Java对象,或将Java对象转换为响应报文。​​​HttpMessageConverter​​​提供了两个注解和两个类型:​​@RequestBody,@ResponseBody​​​,​​RequestEntity,ResponseEntity​​
    2023-01-01
  • 基于java构造方法Vector遍历元素源码分析

    基于java构造方法Vector遍历元素源码分析

    本篇文章是关于ava构造方法Vector源码分析系列文章,本文主要介绍了Vector遍历元素的源码分析,有需要的朋友可以借鉴参考下,希望可以有所帮助
    2021-09-09
  • 通过简易例子讲解Java回调机制

    通过简易例子讲解Java回调机制

    这篇文章主要介绍了通过简易例子讲解Java回调机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java使用FileInputStream流读取文件示例详解

    Java使用FileInputStream流读取文件示例详解

    这篇文章主要介绍了Java使用FileInputStream流读取文件示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java环境下高德地图Api的使用方式

    Java环境下高德地图Api的使用方式

    这篇文章主要介绍了Java环境下高德地图Api的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • spring aop底层源码执行逻辑剖析(源码解析)

    spring aop底层源码执行逻辑剖析(源码解析)

    这篇文章主要介绍了spring aop底层源码执行逻辑剖析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-08-08
  • Springboot详解如何整合使用Thymeleaf

    Springboot详解如何整合使用Thymeleaf

    这篇文章主要分享了Spring Boot整合使用Thymeleaf,Thymeleaf是新一代的Java模板引擎,类似于Velocity、FreeMarker等传统引擎,关于其更多相关内容,需要的小伙伴可以参考一下
    2022-06-06

最新评论