Commit 79bb4a00 authored by liaozan's avatar liaozan 🏀

Skip wrap request if request is not a application/json post request

parent 6c997c19
...@@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.JsonNode; ...@@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.schbrain.common.util.JacksonUtils; import com.schbrain.common.util.JacksonUtils;
import com.schbrain.common.web.annotation.BodyParam; import com.schbrain.common.web.annotation.BodyParam;
import com.schbrain.common.web.servlet.ContentCachingRequest;
import lombok.Setter; import lombok.Setter;
import org.springframework.core.MethodParameter; import org.springframework.core.MethodParameter;
import org.springframework.util.Assert; import org.springframework.util.Assert;
...@@ -68,14 +67,14 @@ public class BodyParamMethodArgumentResolver extends AbstractNamedValueMethodArg ...@@ -68,14 +67,14 @@ public class BodyParamMethodArgumentResolver extends AbstractNamedValueMethodArg
private JsonNode getRequestBody(NativeWebRequest nativeWebRequest) throws IOException { private JsonNode getRequestBody(NativeWebRequest nativeWebRequest) throws IOException {
JsonNode requestBody = (JsonNode) nativeWebRequest.getAttribute(REQUEST_BODY_CACHE, SCOPE_REQUEST); JsonNode requestBody = (JsonNode) nativeWebRequest.getAttribute(REQUEST_BODY_CACHE, SCOPE_REQUEST);
if (requestBody == null) { if (requestBody == null) {
ContentCachingRequest request = wrapRequest(nativeWebRequest); HttpServletRequest request = wrapRequest(nativeWebRequest);
requestBody = objectMapper.readTree(request.getInputStream()); requestBody = objectMapper.readTree(request.getInputStream());
nativeWebRequest.setAttribute(REQUEST_BODY_CACHE, requestBody, SCOPE_REQUEST); nativeWebRequest.setAttribute(REQUEST_BODY_CACHE, requestBody, SCOPE_REQUEST);
} }
return requestBody; return requestBody;
} }
private ContentCachingRequest wrapRequest(NativeWebRequest request) { private HttpServletRequest wrapRequest(NativeWebRequest request) {
return wrapIfRequired(request.getNativeRequest(HttpServletRequest.class)); return wrapIfRequired(request.getNativeRequest(HttpServletRequest.class));
} }
......
...@@ -3,10 +3,13 @@ package com.schbrain.common.web.utils; ...@@ -3,10 +3,13 @@ package com.schbrain.common.web.utils;
import com.schbrain.common.util.ValidateUtils; import com.schbrain.common.util.ValidateUtils;
import com.schbrain.common.web.servlet.ContentCachingRequest; import com.schbrain.common.web.servlet.ContentCachingRequest;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import static org.springframework.http.HttpMethod.POST;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.web.util.WebUtils.getNativeRequest; import static org.springframework.web.util.WebUtils.getNativeRequest;
/** /**
...@@ -19,10 +22,10 @@ public class RequestContentCachingUtils { ...@@ -19,10 +22,10 @@ public class RequestContentCachingUtils {
/** /**
* Make request content cacheable to avoid stream closed error after inputStream closed * Make request content cacheable to avoid stream closed error after inputStream closed
*/ */
public static ContentCachingRequest wrapIfRequired(HttpServletRequest request) { public static HttpServletRequest wrapIfRequired(HttpServletRequest request) {
ValidateUtils.notNull(request, "request must not be null"); ValidateUtils.notNull(request, "request must not be null");
if (request instanceof ContentCachingRequest) { if (request instanceof ContentCachingRequest || !isJsonPostRequest(request)) {
return (ContentCachingRequest) request; return request;
} else { } else {
return new ContentCachingRequest(request); return new ContentCachingRequest(request);
} }
...@@ -43,10 +46,13 @@ public class RequestContentCachingUtils { ...@@ -43,10 +46,13 @@ public class RequestContentCachingUtils {
public static String getRequestBody(HttpServletRequest request, String characterEncoding) { public static String getRequestBody(HttpServletRequest request, String characterEncoding) {
ContentCachingRequest requestToUse = getNativeRequest(request, ContentCachingRequest.class); ContentCachingRequest requestToUse = getNativeRequest(request, ContentCachingRequest.class);
if (requestToUse == null) { if (requestToUse == null) {
log.warn("request is not an instance of {}", ContentCachingRequest.class.getSimpleName());
return null; return null;
} }
return requestToUse.getContentAsString(characterEncoding); return requestToUse.getContentAsString(characterEncoding);
} }
private static boolean isJsonPostRequest(HttpServletRequest request) {
return POST.matches(request.getMethod()) && StringUtils.contains(request.getContentType(), APPLICATION_JSON_VALUE);
}
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment