java获取接口请求参数
GET请求
public static String getParams(HttpServletRequest request) {
if (request == null) {
return "";
} else {
String method = request.getMethod();
if (RequestMethod.GET.name().equals(method)) {
Map<String, Object> params = Maps.newHashMap();
Map<String, String[]> webParamMap = request.getParameterMap();
if (webParamMap != null) {
params.putAll(webParamMap);
}
return MapUtils.isEmpty(params) ? "" : JSON.toJSONString(params);
} else {
return getPostParam(request);
}
}
}
POST请求
- 有一定经验的都知道,如果我们在Filter中读取了HttpServletRequest或者HttpServletResponse的流,就没有办法再次读取了,这样就会造成请求异常。所以,我们需要借助 Spring 提供的ContentCachingRequestWrapper和ContentCachingRequestWrapper实现数据流的重复读取。
我们编写一个过滤器:
@Component
public class RequestWrapperFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
filterChain.doFilter(new ContentCachingRequestWrapper(httpServletRequest), httpServletResponse);
}
}
根据request获取post请求参数
private static String getPostParam(HttpServletRequest request) {
ContentCachingRequestWrapper wrapper = (ContentCachingRequestWrapper) request;
return StringUtils.toEncodedString(wrapper.getContentAsByteArray(), Charset.forName(wrapper.getCharacterEncoding()));
}