2015-12-27 58 views

回答

0

RequestParamMethodArgumentResolver解決用@RequestParam註解的方法參數,其擴展了AbstractNamedValueMethodArgumentResolverAbstractNamedValueMethodArgumentResolver創建一個WebDataBinder,如果它與方法參數類型不匹配,則將類型轉換應用於已解析的參數值。讓我們來看看resolveArguemnt方法的一些部分:

  try { 
       arg = binder.convertIfNecessary(arg, paramType, parameter); 
      } 
      catch (ConversionNotSupportedException ex) { 
       throw new MethodArgumentConversionNotSupportedException(arg, ex.getRequiredType(), 
         namedValueInfo.name, parameter, ex.getCause()); 
      } 
      catch (TypeMismatchException ex) { 
       throw new MethodArgumentTypeMismatchException(arg, ex.getRequiredType(), 
         namedValueInfo.name, parameter, ex.getCause()); 

對於RequestParambinder.convertIfNecessary使用多達116不同Converter s至可能從傳遞String轉換爲所需PARAM,例如List。一些可能的轉換是:

  • 字符串=>枚舉
  • 字符串=>屬性
  • 字符串=>收藏

我想調試resolveArgument方法的唯一途徑。