@RequestParam

tokkaiiii·2025년 4월 28일

spring-mvc

목록 보기
8/27

RequestParamMethodArgumentResolver 클래스에서
supportsParameter 에서 매개변수 조건 확인

public boolean supportsParameter(MethodParameter parameter) {
    if (parameter.hasParameterAnnotation(RequestParam.class)) {
      if (!Map.class.isAssignableFrom(parameter.nestedIfOptional().getNestedParameterType())) {
        return true;
      } else {
        RequestParam requestParam = (RequestParam)parameter.getParameterAnnotation(RequestParam.class);
        return requestParam != null && StringUtils.hasText(requestParam.name());
      }
    } else if (parameter.hasParameterAnnotation(RequestPart.class)) {
      return false;
    } else {
      parameter = parameter.nestedIfOptional();
      if (MultipartResolutionDelegate.isMultipartArgument(parameter)) {
        return true;
      } else {
        return this.useDefaultResolution ? BeanUtils.isSimpleProperty(parameter.getNestedParameterType()) : false;
      }
    }
  }
 @Nullable
  protected Object resolveName(String name, MethodParameter parameter, NativeWebRequest request) throws Exception {
    HttpServletRequest servletRequest = (HttpServletRequest)request.getNativeRequest(HttpServletRequest.class);
    if (servletRequest != null) {
      Object mpArg = MultipartResolutionDelegate.resolveMultipartArgument(name, parameter, servletRequest);
      if (mpArg != MultipartResolutionDelegate.UNRESOLVABLE) {
        return mpArg;
      }
    }

    Object arg = null;
    MultipartRequest multipartRequest = (MultipartRequest)request.getNativeRequest(MultipartRequest.class);
    if (multipartRequest != null) {
      List<MultipartFile> files = multipartRequest.getFiles(name);
      if (!files.isEmpty()) {
        arg = files.size() == 1 ? files.get(0) : files;
      }
    }

    if (arg == null) {
      String[] paramValues = request.getParameterValues(name);
      if (paramValues == null) {
        paramValues = request.getParameterValues(name + "[]");
      }

      if (paramValues != null) {
        arg = paramValues.length == 1 ? paramValues[0] : paramValues;
      }
    }

    return arg;
  }

InvocableHandlerMethod 클래스에서 getMethodArgumentValues 메소드로 매개변수를 모은다

profile
풀스택 자바 개발자입니다

0개의 댓글