从零开始学GeoServer源码十一(如何处理多个文件解析器Multipart Resolver引起的冲突问题)
创始人
2024-05-30 08:55:01
0

目录

  • 前言
  • 1.现象
  • 2.排查问题
  • 3.找到问题
  • 4.解决问题
  • 5.总结

前言

本文起源于我们遇到的一个问题,本来 GeoServer 使用的好好的,但是有天突然发现,无法在 GeoServer 中上传样式的 sld 文件了,报错 “No Multipart-config for Servlet” ,这不是奇怪了,我们命名配置了文件解析器了,为什么会产生这种错误,经过排查是存在文件解析器冲突问题,本来特此记录一下。

1.现象

  一个普通的上传样式 sld 样式文件,结果报错:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.排查问题

  很明显这是一个文件上传报错,意思是没有配置 Multipart 文件解析器,但是奇怪的是我们明明配置了文件解析器了,我们的另外一个文件上传模块都能好好的工作,以下这个文件上传模块的配置:
在这里插入图片描述
  这就很奇怪了,这不是有文件解析器吗?为什么不起作用?难道说还要再配置一个文件解析器?于是给 web 模块也配置上解析器,结果还是不行,这不是奇怪了。
  于是我们转变下思路,这个 sld 上传功能是 Wicket 框架自带的,是不是 Wicket 哪里配置有问题,于是去查 Wicket 文档
在这里插入图片描述
  还是没找到答案。于是考虑到是不是 GeoServer 的bug,将原生 GeoServer 重新编译测试,居然可以正常上传,那就是我们哪里改出的问题!那么关于文件上传,我们还改了哪里呢?自然就是我们自己写的文件上传模块,也就是上文中的配置。

3.找到问题

  那么答案显而易见了,肯定是我们自己写的文件解析器和 Wicket 的文件解析器冲突了,导致 sld 的上传没能被 Wicket 的解析捕获到,那么我们下一步工作就是来解决两个 Multipart Resolver 的冲突问题了。

4.解决问题

  多个文件解析器的冲突解决,网上有很多资料,最简单的就是我们自己写一个文件解析器,这个解析器继承 Spring 的解析器,根据自己的业务进行一些修改,主要是修改 isMultipart 方法,代码如下:

import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import javax.servlet.http.HttpServletRequest;
public class UserDefineMultipartResolver extends CommonsMultipartResolver {@Overridepublic boolean isMultipart(HttpServletRequest request){String servletPath=request.getServletPath();String uri=request.getRequestURI();if(uri.startsWith("/geoserver/file/Upload")){//说明是文件,是multipart,需要spring的multipart解析return true;}else if(servletPath.equals("/web")){//说明不是multipart,直接return falsereturn false;}else {//其他的交给父类去判断return super.isMultipart(request);}}
}

配置的时候自然也要把解析器配置成我们自己的解析器
在这里插入图片描述

  其实注释已经写的很明白了,就是如果是我们自己的方法,自己的文件,直接 return true,告诉 Spring 要进行解析,如果是其他情况,就走 GeoServer 默认的处理方法。这样我们的方法和 Wicket 的方法都能正常运行。

5.总结

  万事万物都是有原因的,不正常的运行状态必然是有不正常的逻辑引起的。我们正式靠着这一逻辑,一步一步,逐渐定位问题并解决问题,最终解决了多个 Multipart Resolver 之间的冲突问题。希望各位读者也能秉持这一思想,精益求精。回见~

相关内容

热门资讯

安永许旭明:上市银行需形成多元... 在利率持续下行、存量按揭利率调整、让利实体经济政策叠加的背景下,中国银行业正经历净息差收窄的严峻考验...
超三百家上市公司披露逾千亿元回... 股票回购增持贷款业务持续落地。今年4月以来,已经有超300家上市公司公开披露回购增持计划,金额上限超...
专访|研究中国带回的月球样品是...   新华社伦敦5月12日电 专访|研究中国带回的月球样品是“至高荣誉”——访英国行星科学家马赫什·阿...
Perpl 完成由 Drago... 吴说获悉,去中心化永续期货交易平台 Perpl 完成由 Dragonfly 领投的 925 万美元融...
国际投行上调中国股票评级 外资... 国际投行上调中国股票评级外资机构分析师认为,风险偏好抬升有望推动更多资金流入A股◎记者 汪友若 中美...
一面迟来的锦旗 一份诚挚的谢... 本报讯(西海新闻记者 祁宗珠)“警官,谢谢你们,我是来送锦旗的。”5月10日下午,一名中年男子走进西...
讲述品牌故事 “电”亮中国品牌... 在第九个“中国品牌日”前夕,国网台州供电公司“永宁橘光”品牌日活动启幕,活动涵盖配网不停电作业观摩、...
布局AI生态 字节系大模型“实... ◎记者 罗茂林 5月13日,字节跳动旗下火山引擎开启上海站的大模型巡展活动,一批新的大模型产品亮相。...
强化防灾减灾行动 筑牢安全“防... 据媒体报道,湖北省兴山县5·12防灾减灾宣传周近日在兴山县实验中学举行启动仪式,全县中小学同步开展地...
中日专家对话肺癌治疗前沿进展 日前,在中日肺癌MDT(Multi-Disciplinary Treatment,多学科治疗)治疗前...
“挖掘机指数”显示 4月基建项... 记者日前获悉,三一重工基于树根互联工业互联网平台打造的“挖掘机指数”显示,今年4月份,全国工程机械各...
农发行推动“银期保”模式落地吉... 近日,中国农业发展银行(简称“农发行”)支持吉林省四平市梨树县玉米“种产销”产业链的“银期保”模式正...
民间家书纸短情长 述说普通家庭... 转自:千龙网原标题:中国人民大学家书博物馆再迎2700余封家书;抢救民间家书项目启动20年来共收藏8...
国家发展改革委:抓好以工代赈项... 记者5月13日获悉,近日,国家发展改革委地区振兴司联合有关部门组织召开会议,部署推进加力扩围实施以工...
聚力推动泛共和盆地绿色崛起 本报讯(记者 石成砚)5月12日至13日,省委副书记、省长罗东川在海南藏族自治州贵德县、贵南县、同德...
大通一女子 手提包失而复得 本报讯(西海新闻记者 郭红霞)5月12日,大通回族土族自治县居民马女士将一面印有“为民办实事 人民好...
壮大技术工人队伍 增强先进制造... 高质量发展需要高素质的劳动者,需要吸引更多高素质人才加入技术工人队伍。中共中央、国务院印发的《关于深...
马斯克称沙特阿拉伯已批准“星链... 2025 年 5 月 13 日,在沙特阿拉伯利雅得举行的沙特 - 美国投资论坛上,特斯拉首席执行官埃...
通胀报告正中特朗普下怀 再次敦...   特朗普利用低于预期的通胀报告再次向美联储主席施压,要求鲍威尔尽快下调利率。  “没有通胀!汽油、...
青海“双冷”产业发展热力十足 长势良好的生菜叶。西海新闻记者 祁晓军 摄冷水鱼现场加工。受访者供图龙羊峡三文鱼实拍图。受访者供图冷...