code: protected void checkJsonBeanValidator() {
          final Class<?> returnType = executeMethod.getReturnType();
          if (!JsonResponse.class.isAssignableFrom(returnType)) {
              return;
          }
          final Type genericReturnType = executeMethod.getGenericReturnType();
          if (genericReturnType == null || !(genericReturnType instanceof ParameterizedType)) { // just in case
              return;
          }
          final Class<?> jsonBeanType = DfReflectionUtil.getGenericFirstClass(genericReturnType);
          if (jsonBeanType == null) { // just in case
              return;
          }
          if (Collection.class.isAssignableFrom(jsonBeanType)) { // e.g. JsonResponse<List<SeaBean>>
              final Type[] resopnseArgTypes = DfReflectionUtil.getGenericParameterTypes(genericReturnType);
              if (resopnseArgTypes.length > 0) { // just in case
                  final Class<?> elementBeanType = DfReflectionUtil.getGenericFirstClass(resopnseArgTypes[0]);
                  if (elementBeanType != null && mayBeJsonBeanType(elementBeanType)) { // just in case
                      doCheckJsonBeanValidator(elementBeanType, Collections.emptyMap()); // can check JsonResponse<List<SeaBean>>
                  }
              }
          } else if (mayBeJsonBeanType(jsonBeanType)) { // e.g. JsonResponse<SeaBean>, JsonResponse<WholeBean<SeaBean>>
              doCheckJsonBeanValidator(jsonBeanType, prepareJsonBeanGenericMap(genericReturnType, jsonBeanType));
          }
      }
docs: ===================