struts升级版本之后无法获取到参数

struts升级版本之后无法获取到参数

struts原版本是2.3.32,后来因为某些原因升级成2.5.30。升级前可以获取到Content-Type:multipart/form-data 的数据。但是升级后发现获取不到了。开始以为是其他jar包版本的错误改了很长时间也解决不了。

直到我看到一个文章说“请求的头部信息为“multipart/form-data”时需要做处理才可以通过request.getParameter(“”)的方法获取到请求参数(文章地址:“https://www.cnblogs.com/fengwenzhee/p/9804628.html”)。

我想到struts的自动封装参数也是通过从request的Parameter中取值的,不经过处理时request.getParameter(“”)为空,struts的自动封装参数也会为空。

正常情况下struts的 web.xml 文件下配置的StrutsPrepareAndExecuteFilter过滤器会通过判断是否为Content-Type是不是multipart/form-data类型进行预先处理 2.3.32和2.5.30的判断代码有一些不一样

struts 2.3.32的判断代码图:
struts升级版本之后无法获取到参数_第1张图片struts 2.5.30的判断代码图:
struts升级版本之后无法获取到参数_第2张图片
简单的说2.5.30采取的是正则表达式的方式截取的 具体的我就不太清楚了。感兴趣的可以自己去看看。
由于我发post请求时
“Content-Type"值等于multipart/form-data;boundary=****
可以通过struts 2.3.32的判断,进行request的预处理,但是struts 2.5.30的判断无法通过所以当版本换成2.5.30后request.getParameter(”")为空。

一般是不会出现种情况的主要原因可能是"Content-Type"值等于multipart/form-data;boundary=****的值书写不正确。

解决方法

由于Content-Type的值是封装在公司的jar包中不方便修改所以我自己写一个Filter判断是不是multipart/form-data 是的话就在filter中处理一下。
struts升级版本之后无法获取到参数_第3张图片

只有一个请求这样就直接在接口入口处理一下就行没有必要写filter

搜索了好久没有找到类似的错误,所以记录一下。可以参考一下。

你可能感兴趣的:(content-Type,struts,java,后端,http)