问题解决:org.springframework.util.InvalidMimeTypeException: Invalid mime type “application/xhtml+xml“_caused by: org.springframework.util.invalidmimetyp_枫夜求索阁的博客-程序员秘密

技术标签: spring  spring boot  问题修复记录  java  spring学习系列  MimeType  Java学习系列  

问题场景

项目运行过程中,部分链接访问会报错,报错提示如下:

org.springframework.http.InvalidMediaTypeException: Invalid mime type "application/xhtml+xml": Invalid token character '+' in token "xhtml+xml"
	at org.springframework.http.MediaType.parseMediaType(MediaType.java:534)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
	at org.springframework.http.MediaType.parseMediaTypes(MediaType.java:556)
	at org.springframework.boot.autoconfigure.web.servlet.WelcomePageHandlerMapping.getAcceptedMediaTypes(WelcomePageHandlerMapping.java:93)
	at org.springframework.boot.autoconfigure.web.servlet.WelcomePageHandlerMapping.getHandlerInternal(WelcomePageHandlerMapping.java:82)
	at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:401)
	at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1231)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1014)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.orm.hibernate5.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:155)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at com.common.filter.PermissionFilter.doFilter(PermissionFilter.java:74)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at pub.servlet.CsrfFilter.doFilter(CsrfFilter.java:55)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at pub.servlet.TokenLoginFilter.doFilter(TokenLoginFilter.java:91)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at pub.servlet.XssFilter.doFilter(XssFilter.java:89)

本文主要是讲述该种情况发生的原因及解决方案!

问题环境

软件 版本
springboot 2.1.8.RELEASE

问题原因

这其实是一个坑!!!
在这里插入图片描述
一般遇到这种问题,找不出思路的话,单步调试是解决办法的最快办法。没必要去Google或者百度,因为每个人的情况不一定一致,其他人的博客也不一定将发生问题的环境说清楚。所以,别人可以的解决方案不一定适合当前环境!!!

经过重重跳转,终于发现了原因!原来是项目有设置了XssFilter,会将参数里面的敏感字符进行替换。其他会对抬头进行转换,代码如下:

public String getHeader(String name) {
    
    String value = super.getHeader(xssEncode(name));
    if (value != null) {
    
        value = xssEncode(value);
    }

    return value;
}

如果,有读者遇到类似的问题,说不定就是在参数传递过程中,有其他类对参数进行了转换,导致问题的发生!!!

解决方案

将抬头进行转换的代码进行重构,不进行转换,直接返回原来的字符!

结果

顺利解决问题!!!

总结

遇到问题,本地有环境,可以先单步调试。先不网上找解决方案,因为可能找不到!!!

随缘求赞

如果我的文章对大家产生了帮忙,可以在文章底部点个赞或者收藏;
如果有好的讨论,可以留言;
如果想继续查看我以后的文章,可以点击关注
可以扫描以下二维码,关注我的公众号:枫夜之求索阁,查看我最新的分享!
在这里插入图片描述
拜拜

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

智能推荐

如何分析解决Android ANR(很详细)_markvz的博客-程序员秘密

如何分析解决Android ANR2012年12月07日 16:44:02 Dartagnan 阅读数:80319更多个人分类: Android   来自: http://blog.csdn.net/tjy1985/article/details/6777346 http://blog.csdn.net/tjy1985/article/details/...

Xmanager远程连接Linux系统图形界面详解_Kally_Wang的博客-程序员秘密

1、首先安装与下载图形界面GNOMEyum groupinstall "Desktop"yum groupinstall "X Window System"yum groupinstall "Chinese Support"  (可选项) 假如提示有以下错误产生:Loaded plugins: fastestmirror, prestoCould n

【docker系列】详解docker容器状态转换管理命令_字母哥哥的博客-程序员秘密

本文系docker系列专栏第六篇。docker容器有三种状态运行、停止、暂停,镜像可以创建、运行容器,镜像和容器也可以转换成tar压缩包进行存储。本文为大家介绍容器的状态转换命令及镜像创建运行容器、tar包导入导出相关的命令及使用场景。

二、入门Substrate之Substrate-node-template模板中的pallet-template进行源码分析_暴龙战士wnb的博客-程序员秘密

二、入门Substrate之Substrate-node-template模板中的pallet-template进行源码分析其实作为Substrate的开发者们,已经为使用框架者提供了类似八股文一样的宏来简化开发,目前你只需要记住这个配置是干什么用的就够了,如果想要自定义pallet,建议直接把模板中的lib.rs直接复制过去,进行修改即可,后续想要深入了解,可以去看substrate的源码。本文将会分析了pallet-template的文件结构,常用配置的作用,并仿照模板自定义一个交易函数、存储类型、事

数据库实体、关系(一对一实现方式、一对多实现方式、多对多实现方式)_实体一对一 一对多 多对多_徕胖的博客-程序员秘密

就数据库而言,实体往往指某类事物的集合。 把每一类数据对象的个体称为实体。数据库中:E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。实体之间的关系有一对一(如一个学生对应一个档案,一个档案对应一个学生);一对多,多对一;多对多;数据库中一对一的实现方式:(1)唯一外键方式:在A和B任...

吴英昊:电商搜索引擎的架构设计和性能优化_残阙的歌的博客-程序员秘密

吴英昊:电商搜索引擎的架构设计和性能优化摘要:电商搜索引擎和普通的搜索引擎有很大差别,因为电商搜索引擎主要是解决用户要“买什么”,而不是用户“搜什么”。比如搜索“百年孤独”,电商的搜索肯定是给你推荐这本书的商家,而不是《百年孤独》是一本书。在OneAPM 技术公开课第一期中,前当当网高级架构师吴英昊对电商搜索引擎的架构进行了深入分享。在演讲中,他首先就电商搜索引擎的特点进行了解

随便推点

postgresql常用命令行命令,重命名表,字段,查看数据库字符编码,主键自增,增加索引_pg 表重命名_Leo Han的博客-程序员秘密

后台进入postgresql命令行:psql列出所有数据库:postgres=# \l切换数据库postgres=# \c 数据库名称创建数据库:create database 数据库名称查看当前库所有模式:\dn删除数据库:drop database 数据库名称创建模式 schema:create schema 模式名称获取当前库下所有表:select * from pg_tables;查看某个表的详细信息:postgres=# \d 表名称重命名表:

java.lang.IllegalAccessError: org.apache.commons.dbcp.DelegatingPreparedStatement.isClosed()Z解决方案_mybatis3.5.9不兼容_健康搬砖人的博客-程序员秘密

 今天在使用Spring+Mybatis+DBCP的时候报了这么一个错误java.lang.IllegalAccessError: org.apache.commons.dbcp.DelegatingPreparedStatement.isClosed()Z at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at...

配置SQL Server的命名管道和TCP/IP设置_寒冰屋的博客-程序员秘密

在本技巧中,我们将了解如何启用TCP/IP和命名管道并配置防火墙规则,以便其他网络计算机可以与SQL Server实例进行通信。

IOS IJKPlayer播放RTSP_ethan_xue的博客-程序员秘密

官网:https://github.com/Bilibili/ijkplayer本文的意义今天闲下来,把以前做RTSP的过程简单整理下。 详细的图文步骤网络上有很多,但大多是RTMP等的,这里简单记录一下RTSP的部分,由于IJKPlayer默认不支持RTSP,需要改些配置。 转载请注明出处 ethan_xue博客1.clonegit clone https://github.com/Bilib

初来学Linux_weixin_33857230的博客-程序员秘密

学的原因: 时间过得是真的快,毕业两年基本是玩着过来的;也是意识到不能再混日子了,之前的工作也没什么前景,所有经朋友推荐和考察,选择了学习运维,学习Linux。计划: 学习了一周,学习氛围比我想象的要好,时间安排的很合理,当年快高考的时候好像也没这么认真过; 身为0基础的小白,经过一周也对Linux有了大概的了解,第一周的学...

AXmath下载与安装_lilibiu的博客-程序员秘密

https://macno1.lanzoui.com/icj811g点击 普通下载可以看到文件很小。然后就是解压,安装等,常规流程。此时是分享版,部分功能还未解锁重点来了!!!打开文件夹crack把里面的exe文件复制之后拿到外面,粘贴,替换,然后重启即可这样就是免费的完整版本啦。ps:AXmath对于word的兼容性更好,比wps兼容好。虽然wps可以通过安装修补插件VBA来完成,但是终归是不稳定的,还是用word吧。有帮助记得 点赞收藏 呀~感谢...

推荐文章

热门文章

相关标签