RequestStringParamHandlerMethodArgumentResolver.java 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. package com.ydtech.aop;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.ydtech.aop.request.RequestSingleParam;
  4. import org.springframework.core.MethodParameter;
  5. import org.springframework.web.bind.support.WebDataBinderFactory;
  6. import org.springframework.web.context.request.NativeWebRequest;
  7. import org.springframework.web.method.support.HandlerMethodArgumentResolver;
  8. import org.springframework.web.method.support.ModelAndViewContainer;
  9. import javax.servlet.http.HttpServletRequest;
  10. import java.io.BufferedReader;
  11. public class RequestStringParamHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
  12. @Override
  13. public boolean supportsParameter(MethodParameter methodParameter) {
  14. return methodParameter.hasParameterAnnotation(RequestSingleParam.class);
  15. }
  16. @Override
  17. public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
  18. RequestSingleParam requestSingleParam = methodParameter.getParameterAnnotation(RequestSingleParam.class);
  19. HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class);
  20. assert request != null;
  21. BufferedReader reader = request.getReader();
  22. StringBuilder sb = new StringBuilder();
  23. char[] buf = new char[1024];
  24. int rd;
  25. while ((rd = reader.read(buf)) != -1) {
  26. sb.append(buf, 0, rd);
  27. }
  28. String value = requestSingleParam.value();
  29. JSONObject jsonObject = JSONObject.parseObject(sb.toString());
  30. return jsonObject.get(value);
  31. }
  32. }