RequestStringParamHandlerMethodArgumentResolver.java 1.7 KB

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