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;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.schbrain.common.util.JacksonUtils;
import com.schbrain.common.web.annotation.BodyParam;
import com.schbrain.common.web.servlet.ContentCachingRequest;
import lombok.Setter;
import org.springframework.core.MethodParameter;
import org.springframework.util.Assert;
......@@ -68,14 +67,14 @@ public class BodyParamMethodArgumentResolver extends AbstractNamedValueMethodArg
private JsonNode getRequestBody(NativeWebRequest nativeWebRequest) throws IOException {
JsonNode requestBody = (JsonNode) nativeWebRequest.getAttribute(REQUEST_BODY_CACHE, SCOPE_REQUEST);
if (requestBody == null) {
ContentCachingRequest request = wrapRequest(nativeWebRequest);
HttpServletRequest request = wrapRequest(nativeWebRequest);
requestBody = objectMapper.readTree(request.getInputStream());
nativeWebRequest.setAttribute(REQUEST_BODY_CACHE, requestBody, SCOPE_REQUEST);
}
return requestBody;
}
private ContentCachingRequest wrapRequest(NativeWebRequest request) {
private HttpServletRequest wrapRequest(NativeWebRequest request) {
return wrapIfRequired(request.getNativeRequest(HttpServletRequest.class));
}
......
......@@ -3,10 +3,13 @@ package com.schbrain.common.web.utils;
import com.schbrain.common.util.ValidateUtils;
import com.schbrain.common.web.servlet.ContentCachingRequest;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import javax.annotation.Nullable;
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;
/**
......@@ -19,10 +22,10 @@ public class RequestContentCachingUtils {
/**
* 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");
if (request instanceof ContentCachingRequest) {
return (ContentCachingRequest) request;
if (request instanceof ContentCachingRequest || !isJsonPostRequest(request)) {
return request;
} else {
return new ContentCachingRequest(request);
}
......@@ -43,10 +46,13 @@ public class RequestContentCachingUtils {
public static String getRequestBody(HttpServletRequest request, String characterEncoding) {
ContentCachingRequest requestToUse = getNativeRequest(request, ContentCachingRequest.class);
if (requestToUse == null) {
log.warn("request is not an instance of {}", ContentCachingRequest.class.getSimpleName());
return null;
}
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