问题解决: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

智能推荐

VUE实现SQL在线编辑器,SQL分析器,SQL代码关键字提示_codemirror sql语法检查-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏48次。1、首先使用npm安装CodeMirror插件,sql-formatter格式化插件npm install --save codemirrornpm install --save sql-formatter2、然后引入该文件import 'codemirror/theme/ambiance.css'import 'codemirror/lib/codemirror.css'import 'codemirror/addon/hint/show-hint.css'const ..._codemirror sql语法检查

Jackson使用备忘_kebabcasestrategy snakecasestrategy lowercasestrat-程序员宅基地

文章浏览阅读4.9k次。让Spring能够把作为ResponseBody返回的Java对象自动使用Jackson序列化为JSON根式这样,只要在控制器方法上添加@ResponseBody注解(或在控制器类上添加@RestController注解),则方法返回值就会被Jackson自动序列化为JSON格式返回。见配置文件片段:class="org.springfr_kebabcasestrategy snakecasestrategy lowercasestrategy

干翻Mybatis源码系列之第十二篇:自写Mybatis拦截器实现分页操作_mybatis分页拦截器-程序员宅基地

文章浏览阅读1.8w次。不从恶人的计谋,不站罪人的道路,不坐亵慢人的座位,惟喜爱耶和华的律法,昼夜思想,这人便为有福!他要像一棵树栽在溪水旁,按时候结果子,叶子也不枯干。凡他所做的尽都顺利。_mybatis分页拦截器

linux上的windows游戏,PlayOnLinux - 在Linux上运行Windows应用程序和游戏-程序员宅基地

文章浏览阅读363次。在我们对这个博客以前的文章中,我们使用红酒程序安装和运行在Ubuntu和其他红帽的Linux发行版基于Windows应用程序。 没有可称为PlayOnLinux另一个开源软件,使用葡萄酒作为它的基础,并提供一个功能丰富的功能和友好的用户界面安装和在Linux上运行Windows应用程序。 该软件的目的是简化和自动化安装和运行在Linux平台上的窗口的应用程序的过程。 它有一个应用程序列表,您可以在..._playonlinux

微软发布WF教程及大量示例_微软wf教程-程序员宅基地

文章浏览阅读1.7k次。 继前面微软公司发布Windows Communication Foundation (WCF)和Windows CardSpace的示例程序之后,微软今天又发布了WF的教程和大量示例,对于学习WF的朋友来说,是一份很好的学习资料。下载包括教程和示例两个压缩包,在示例部分包括如下的Application:l OrderingStateMachinel _微软wf教程

GDI+学习之线性渐变画刷_gdi+线性画刷-程序员宅基地

文章浏览阅读1k次。GDI+学习之线性渐变画刷_gdi+线性画刷

随便推点

CC2640R2F学习笔记(6)——UART串口使用_cc2640r2串口使用-程序员宅基地

文章浏览阅读6.4k次,点赞6次,收藏29次。#一、硬件连接串口引脚TXDDIO_2RXDDIO_3二、移植文件链接:https://pan.baidu.com/s/1cC8HA_GC6e3Kci1ayvJPIA 提取码:xdke将 uart.c 和 uart.h 两个文件拖拽至CCS工程的Application文件夹下添加文件过程中,选项选择如下2.1 uart.c/**********..._cc2640r2串口使用

Oracle数据结构和指令_oracle底层数据结构-程序员宅基地

文章浏览阅读1.6k次。ORACLE的启动和关闭1、在单机环境下要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下su - oraclea、启动ORACLE系统oracle>svrmgrlSVRMGR>connect internalSVRMGR>startupSVRMGR>quitb、关闭ORACLE系统oracle>svrmgrlSVRMGR>connect internalSVRMGR>shutdownSVR..._oracle底层数据结构

解决:Chrome查看源码时出现乱码_chrome source 源碼空白-程序员宅基地

文章浏览阅读1.5w次,点赞7次,收藏4次。新版chrome没有了编码功能,不过对于强大的chrome插件这并不是什么大问题!~只需在chrome网上应用店安装名为Set Character Encoding 的插件就能轻松解决了!下载地址:https://chrome.google.com/webstore/detail/set-character-encoding/bpojelgakakmcf_chrome source 源碼空白

PS插件:灯光工厂安装教程-程序员宅基地

文章浏览阅读2.1k次。PS插件:灯光工厂安装教程 PS插件2020wids版最新插件:灯光工厂及详细安装教程;插件下载地址:https://www.henenseo.com/archives/3267收藏分享不易,希望大家多多点个赞,投个币,感谢大家!...

python-redis连接池_python redis连接池-程序员宅基地

文章浏览阅读2.2k次。在python中,要操作redis,目前主要是通过一个python-redis模块来实现1、在python中安装redis模块2、在python中使用redis跟其他模块一样,在安装好redis模块后,要使用redis模块就要先导入。python连接。_python redis连接池

大语言模型的最新研究方向综述_大语言模型未来发展的方向包括哪些-程序员宅基地

文章浏览阅读3k次,点赞5次,收藏33次。文章梳理了自然语言处理( Natural Language Processing, NLP)领域的大语言模型最新研究方向。_大语言模型未来发展的方向包括哪些

推荐文章

热门文章

相关标签