diff --git a/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/param/ApiArgumentResolver.java b/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/param/ApiArgumentResolver.java index 0cfcb3a5..71052dbd 100644 --- a/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/param/ApiArgumentResolver.java +++ b/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/param/ApiArgumentResolver.java @@ -181,10 +181,13 @@ public class ApiArgumentResolver implements SopHandlerMethodArgumentResolver { * @param httpServletRequest */ protected void bindUploadFile(Object param, HttpServletRequest httpServletRequest) { + if (httpServletRequest instanceof MyServletRequestWrapper) { + httpServletRequest = (HttpServletRequest)((MyServletRequestWrapper) httpServletRequest).getRequest(); + } if (param == null) { return; } - if (this.isMultipartRequest(httpServletRequest)) { + if (OpenUtil.isMultipart(httpServletRequest)) { MultipartHttpServletRequest request = (MultipartHttpServletRequest) httpServletRequest; Class bizClass = param.getClass(); ReflectionUtils.doWithFields(bizClass, field -> { @@ -196,10 +199,6 @@ public class ApiArgumentResolver implements SopHandlerMethodArgumentResolver { } } - protected boolean isMultipartRequest(HttpServletRequest request) { - return request instanceof MultipartRequest; - } - /** * 获取其它的参数解析器 * diff --git a/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/util/OpenUtil.java b/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/util/OpenUtil.java index b048ea7b..727e5168 100644 --- a/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/util/OpenUtil.java +++ b/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/util/OpenUtil.java @@ -14,6 +14,7 @@ import java.net.URLDecoder; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import java.util.Set; @@ -23,6 +24,8 @@ import java.util.Set; @Slf4j public class OpenUtil { + public static final String MULTIPART = "multipart/"; + /** * 将get类型的参数转换成map, * @@ -120,4 +123,19 @@ public class OpenUtil { return serverSign.equals(sign); } + /** + * 是否是文件上传请求 + * + * @param request 请求 + * @return true:是 + */ + public static boolean isMultipart(HttpServletRequest request) { + String contentType = request.getContentType(); + // Don't use this filter on GET method + if (contentType == null) { + return false; + } + return contentType.toLowerCase(Locale.ENGLISH).startsWith(MULTIPART); + } + } diff --git a/sop-example/sop-story/src/main/java/com/gitee/sop/storyweb/controller/Example1001_BaseController.java b/sop-example/sop-story/src/main/java/com/gitee/sop/storyweb/controller/Example1001_BaseController.java index b2eb6e2c..e056c99e 100644 --- a/sop-example/sop-story/src/main/java/com/gitee/sop/storyweb/controller/Example1001_BaseController.java +++ b/sop-example/sop-story/src/main/java/com/gitee/sop/storyweb/controller/Example1001_BaseController.java @@ -12,7 +12,9 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.nio.charset.StandardCharsets; @@ -83,9 +85,10 @@ public class Example1001_BaseController { // 忽略验证 @ApiOperation(value = "忽略签名验证", notes = "忽略签名验证") @Open(value = "story.get.ignore", ignoreValidate = true) - @RequestMapping("/get/ignore/v1") - public StoryResult getStory21(StoryParam story) { + @RequestMapping(value = "/get/ignore/v1", method = {RequestMethod.GET, RequestMethod.POST}) + public StoryResult getStory21(@RequestBody StoryParam story) { StoryResult result = new StoryResult(); + result.setId((long) story.getId()); result.setName(story.getName() + ", ignoreValidate = true"); return result; }