代码编织梦想

问题描述

  • 项目开发之前使用拦截器对controller的访问进行拦截,一切功能正常。今天在项目中加入消息转换器后,发现无论访问什么网页,都是404错误,No mapping for GET xxx
    在这里插入图片描述

问题分析

  • 出现的错误很像是拦截器没有配置对导致的,通过注释WebMvcConfigMsgConverter消息转换器后,发现项目和原理一样能够正常运行,初步怀疑是拦截器和消息转换器发生了冲突。
  • 由于消息转换器中:将消息转换器对象追加到mvc框架的转换器集合中converters.add(0,messageConverter);这里设置了一个优先级0,表示在所有配置之前生效当前配置,优先级最高,于是怀疑是当前消息转换器的执行后就不再执行拦截器。
  • 将两个配置文件整合到一起,发现奇怪的错误,即满足单继承,又实现了接口,idea提示我们要重写很多方法,但是单独实现接口是不用重写这些default方法的。

解决方案

  • 查找资料发现在 SpringBoot 2.0 后,官方推荐直接实现WebMvcConfigurer或者直接继承WebMvcConfigurationSupport,方式一实现WebMvcConfigurer接口(推荐),方式二继承WebMvcConfigurationSupport类。其实使用其中一种方法就可以完成对应的功能!这里使用实现接口的方法!
@Slf4j
@Configuration
public class BackendWebMvcConfig implements WebMvcConfigurer {
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("拓展消息转换器成功加载");
        //创建消息转换器对象
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
        //设置对象转换器,底层使用Jackson将Java对象转为json
        messageConverter.setObjectMapper(new JacksonObjectMapper());
        //将上面的消息转换器对象追加到mvc框架的转换器集合中
        converters.add(0,messageConverter);
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //重写方法,添加拦截器方法
        registry.addInterceptor(loginInterceptor())
                //拦截哪些路径
                .addPathPatterns("/**")
                //不拦截路径
                .excludePathPatterns("/employee/backend/page/login/login.do",
                        "/backend/**",
                        "/employee/backend/page/login/logout.do",
                        "/front/**",
                        "/error"
                );
    }

    @Bean
    public LoginInterceptor loginInterceptor(){
        return new LoginInterceptor();
    }

}

成功解决问题!
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/YiGeiGiaoGiao/article/details/129678489

拦截器示例之日志记录-爱代码爱编程

xxx-servlet.xml配置 <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**

java轻量级mvc框架struts2 2.5详解(4)struts2的拦截器_openbox2008的博客-爱代码爱编程

一、拦截器概述 拦截器:Struts2拦截器是在访问某个Action或Action的某个方法之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现。 AOP:面向切面编程.其实现原理:动态代理模式 WebWork中文文档解释:拦截器是动态拦截Action调用的对象。 它提供了一种机制使开发者可以定义在一个Action执行的

拦截器filter【掌握】(解决post和get中文请求乱码问题)_java豪的博客-爱代码爱编程

灵魂三问:(what,why,how) 1.什么是过滤器 过滤器介绍 Filter是sun公司中servlet2.3后增加的一个新功能Servlet规范中三个技术 Servlet Listener Filter在Jav

springboot + spring security 实现前后端分离登录认证及权限控制-爱代码爱编程

Springboot + Spring Security 实现前后端分离登录认证及权限控制 前言本文主要的功能文章目录文章正文一、准备工作1、统一错误码枚举2、统一json返回体3、返回体构造工具4、pom5、配置文

最全SpringBoot配置入门教程包含Docker等-爱代码爱编程

一、Spring Boot 入门 1、Spring Boot 简介 简化Spring应用开发的一个框架; 整个Spring技术栈的一个大整合; J2EE开发的一站式解决方案; 2、微服务 2014,martin fowler 微服务:架构风格(服务微化) 一个应用应该是一组小型服务;可以通过HTTP的方式进行互通; 单体应用

SpringBoot:SpringBoot入门配置文件YAML与properties,日志SLF4J,Web开发Thymeleaf,docker安装,数据访问,SpringDataJPA,自动配置原理-爱代码爱编程

一、Spring Boot 入门 1、Spring Boot 简介 简化Spring应用开发的一个框架; 整个Spring技术栈的一个大整合; J2EE开发的一站式解决方案; 2、微服务 2014,martin fowler 微服务:架构风格(服务微化) 一个应用应该是一组小型服务;可以通过HTTP的方式进行互通; 单体应用

【Java】配置拦截器 实现拦截器功能 打印日志输出到控制台 SpringMvc(个人梳理)-爱代码爱编程

【Java】配置拦截器 完整代码 实现拦截器功能 项目实战 打印日志输出到控制台 SpringMvc(个人梳理) 项目技术选型 spring+springmvc+maven 文章目录 【Java】配置拦截器 完整代码 实现拦截器功能 项目实战 打印日志输出到控制台 SpringMvc(个人梳理)前言一、配置拦截器参数spring-servl

SpringBoot 的入门学习(2):SpringMVC自动配置之静态资源、Rest映射,请求处理,参数解析,响应处理-爱代码爱编程

1、 SpringMVC 自动配置的场景概述 在进行项目编写前,我们还需要知道一个东西,就是SpringBoot对我们的SpringMVC还做了哪些配置,包括如何扩展,如何定制。 只有把这些都搞清楚了,我们在之后使用才会更加得心应手。途径一:源码分析;途径二:官方文档! 官网阅读 官方文档内容概述如下: Spring Boot provides

springboot配置类简要_zznek0的博客-爱代码爱编程

第一章:spring配置 热部署配置 spring: devtools: restart: additional-paths: src/main/java exclude: WEB-INF/** enabled: true <dependency> <groupId>o

springboot2笔记02 配置文件,web开发(springmvc自动配置概述,简单功能分析,请求参数处理)_add-爱代码爱编程

配置文件 文件类型 properties 同以前的properties用法 yaml 简介 YAML是“YAML Ain‘t Markup Language”(YAML不是一种标记语言)的递归缩写。在开发这种语言时,YAML的意思其实是“Yet Another Markup Language”(仍是一种标记语言) 非常适合用来做以数据为中心的