org.springframework.core.MethodParameter#getParameterName ( )源码实例Demo

下面列出了org.springframework.core.MethodParameter#getParameterName ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

@Override
public Object resolveArgument(MethodParameter parameter, Channel channel, Object object) throws Exception {
    PathVariable ann = parameter.getParameterAnnotation(PathVariable.class);
    String name = ann.name();
    if (name.isEmpty()) {
        name = parameter.getParameterName();
        if (name == null) {
            throw new IllegalArgumentException(
                    "Name for argument type [" + parameter.getNestedParameterType().getName() +
                            "] not available, and parameter name information not found in class file either.");
        }
    }
    Map<String, String> uriTemplateVars = channel.attr(URI_TEMPLATE).get();
    if (!CollectionUtils.isEmpty(uriTemplateVars)) {
        return uriTemplateVars;
    } else {
        return Collections.emptyMap();
    }
}
 
@Override
@Nullable
public Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
		NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory)
		throws IOException, HttpMediaTypeNotSupportedException {

	ServletServerHttpRequest inputMessage = createInputMessage(webRequest);
	Type paramType = getHttpEntityType(parameter);
	if (paramType == null) {
		throw new IllegalArgumentException("HttpEntity parameter '" + parameter.getParameterName() +
				"' in method " + parameter.getMethod() + " is not parameterized");
	}

	Object body = readWithMessageConverters(webRequest, parameter, paramType);
	if (RequestEntity.class == parameter.getParameterType()) {
		return new RequestEntity<>(body, inputMessage.getHeaders(),
				inputMessage.getMethod(), inputMessage.getURI());
	}
	else {
		return new HttpEntity<>(body, inputMessage.getHeaders());
	}
}
 
private Type getHttpEntityType(MethodParameter parameter) {
	Assert.isAssignable(HttpEntity.class, parameter.getParameterType());
	Type parameterType = parameter.getGenericParameterType();
	if (parameterType instanceof ParameterizedType) {
		ParameterizedType type = (ParameterizedType) parameterType;
		if (type.getActualTypeArguments().length != 1) {
			throw new IllegalArgumentException("Expected single generic parameter on '" +
					parameter.getParameterName() + "' in method " + parameter.getMethod());
		}
		return type.getActualTypeArguments()[0];
	}
	else if (parameterType instanceof Class) {
		return Object.class;
	}
	throw new IllegalArgumentException("HttpEntity parameter '" + parameter.getParameterName() +
			"' in method " + parameter.getMethod() + " is not parameterized");
}
 
@Override
    public Object resolveArgument(
            MethodParameter parameter, ModelAndViewContainer mavContainer,
            NativeWebRequest webRequest, WebDataBinderFactory binderFactory)
            throws Exception {

//        String json = getRequestInfo(webRequest);
//        Class<?> parameterType = parameter.getParameterType();

        JSONObject para = getRequestInfo1(webRequest);
        Class<?> type = parameter.getParameterType();
        String name = parameter.getParameterName();
        if (null != para && para.containsKey(name)) {
            return JSON.parseObject(para.getString(name), type);
        }
        return null;
    }
 
@Override
@Nullable
public Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
		NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory)
		throws IOException, HttpMediaTypeNotSupportedException {

	ServletServerHttpRequest inputMessage = createInputMessage(webRequest);
	Type paramType = getHttpEntityType(parameter);
	if (paramType == null) {
		throw new IllegalArgumentException("HttpEntity parameter '" + parameter.getParameterName() +
				"' in method " + parameter.getMethod() + " is not parameterized");
	}

	Object body = readWithMessageConverters(webRequest, parameter, paramType);
	if (RequestEntity.class == parameter.getParameterType()) {
		return new RequestEntity<>(body, inputMessage.getHeaders(),
				inputMessage.getMethod(), inputMessage.getURI());
	}
	else {
		return new HttpEntity<>(body, inputMessage.getHeaders());
	}
}
 
@Override
public Object resolveArgument(MethodParameter parameter, Channel channel, Object object) throws Exception {
    RequestParam ann = parameter.getParameterAnnotation(RequestParam.class);
    String name = ann.name();
    if (name.isEmpty()) {
        name = parameter.getParameterName();
        if (name == null) {
            throw new IllegalArgumentException(
                    "Name for argument type [" + parameter.getNestedParameterType().getName() +
                            "] not available, and parameter name information not found in class file either.");
        }
    }

    if (!channel.hasAttr(REQUEST_PARAM)) {
        QueryStringDecoder decoder = new QueryStringDecoder(((FullHttpRequest) object).uri());
        channel.attr(REQUEST_PARAM).set(decoder.parameters());
    }

    Map<String, List<String>> requestParams = channel.attr(REQUEST_PARAM).get();
    MultiValueMap multiValueMap = new LinkedMultiValueMap(requestParams);
    if (MultiValueMap.class.isAssignableFrom(parameter.getParameterType())) {
        return multiValueMap;
    } else {
        return multiValueMap.toSingleValueMap();
    }
}
 
/**
 * Fall back on the parameter name from the class file if necessary and
 * replace {@link ValueConstants#DEFAULT_NONE} with null.
 */
private NamedValueInfo updateNamedValueInfo(MethodParameter parameter, NamedValueInfo info) {
	String name = info.name;
	if (info.name.isEmpty()) {
		name = parameter.getParameterName();
		if (name == null) {
			Class<?> type = parameter.getParameterType();
			throw new IllegalArgumentException(
					"Name for argument of type [" + type.getName() + "] not specified, " +
							"and parameter name information not found in class file either.");
		}
	}
	return new NamedValueInfo(name, info.required,
			ValueConstants.DEFAULT_NONE.equals(info.defaultValue) ? null : info.defaultValue);
}
 
private void addFieldDescriptor(HandlerMethod handlerMethod,
        JavadocReader javadocReader, ConstraintReader constraintReader,
        FieldDescriptors fieldDescriptors, MethodParameter param, A annot) {
    String javaParameterName = param.getParameterName();
    String pathName = getPath(annot);

    String parameterName = hasLength(pathName) ? pathName : javaParameterName;
    String parameterTypeName = determineTypeName(param.nestedIfOptional().getNestedParameterType());
    String description = javadocReader.resolveMethodParameterComment(
            handlerMethod.getBeanType(), handlerMethod.getMethod().getName(),
            javaParameterName);

    FieldDescriptor descriptor = fieldWithPath(parameterName)
            .type(parameterTypeName)
            .description(description);

    Attribute constraints = constraintAttribute(param, constraintReader);
    Attribute optionals = optionalsAttribute(param, annot);
    Attribute deprecated = deprecatedAttribute(param, annot, javadocReader);
    final Attribute defaultValue = defaultValueAttribute(annot);
    if (defaultValue == null) {
        descriptor.attributes(constraints, optionals, deprecated);
    } else {
        descriptor.attributes(constraints, optionals, deprecated, defaultValue);
    }

    fieldDescriptors.putIfAbsent(parameterName, descriptor);
}
 
/**
 * Create a new NamedValueInfo based on the given NamedValueInfo with sanitized values.
 */
private NamedValueInfo updateNamedValueInfo(MethodParameter parameter, NamedValueInfo info) {
	String name = info.name;
	if (info.name.length() == 0) {
		name = parameter.getParameterName();
		if (name == null) {
			throw new IllegalArgumentException("Name for argument type [" + parameter.getParameterType().getName() +
					"] not available, and parameter name information not found in class file either.");
		}
	}
	String defaultValue = (ValueConstants.DEFAULT_NONE.equals(info.defaultValue) ? null : info.defaultValue);
	return new NamedValueInfo(name, info.required, defaultValue);
}
 
@Override
public void contributeMethodArgument(MethodParameter parameter, Object value,
		UriComponentsBuilder builder, Map<String, Object> uriVariables, ConversionService conversionService) {

	if (Map.class.isAssignableFrom(parameter.nestedIfOptional().getNestedParameterType())) {
		return;
	}

	PathVariable ann = parameter.getParameterAnnotation(PathVariable.class);
	String name = (ann != null && !StringUtils.isEmpty(ann.value()) ? ann.value() : parameter.getParameterName());
	String formatted = formatUriValue(conversionService, new TypeDescriptor(parameter.nestedIfOptional()), value);
	uriVariables.put(name, formatted);
}
 
@Override
public void contributeMethodArgument(MethodParameter parameter, Object value,
		UriComponentsBuilder builder, Map<String, Object> uriVariables, ConversionService conversionService) {

	if (Map.class.isAssignableFrom(parameter.getParameterType())) {
		return;
	}

	PathVariable ann = parameter.getParameterAnnotation(PathVariable.class);
	String name = (ann == null || StringUtils.isEmpty(ann.value()) ? parameter.getParameterName() : ann.value());
	value = formatUriValue(conversionService, new TypeDescriptor(parameter), value);
	uriVariables.put(name, value);
}
 
源代码12 项目: springdoc-openapi   文件: DataRestRequestBuilder.java
/**
 * Build common parameters.
 *
 * @param domainType the domain type
 * @param openAPI the open api
 * @param requestMethod the request method
 * @param methodAttributes the method attributes
 * @param operation the operation
 * @param pNames the p names
 * @param parameters the parameters
 */
public void buildCommonParameters(Class<?> domainType, OpenAPI openAPI, RequestMethod requestMethod, MethodAttributes methodAttributes, Operation operation, String[] pNames, MethodParameter[] parameters) {
	parameters = DelegatingMethodParameter.customize(pNames, parameters);
	for (MethodParameter methodParameter : parameters) {
		final String pName = methodParameter.getParameterName();
		ParameterInfo parameterInfo = new ParameterInfo(pName, methodParameter);
		if (isParamToIgnore(methodParameter)) {
			if (PersistentEntityResource.class.equals(methodParameter.getParameterType())) {
				Schema<?> schema = SpringDocAnnotationsUtils.resolveSchemaFromType(domainType, openAPI.getComponents(), null, methodParameter.getParameterAnnotations());
				parameterInfo.setParameterModel(new Parameter().schema(schema));
			}
			else if (methodParameter.getParameterAnnotation(BackendId.class) != null) {
				parameterInfo.setParameterModel(new Parameter().name("id").in(ParameterIn.PATH.toString()).schema(new StringSchema()));
			}
			Parameter parameter;
			io.swagger.v3.oas.annotations.Parameter parameterDoc = AnnotatedElementUtils.findMergedAnnotation(
					AnnotatedElementUtils.forAnnotations(methodParameter.getParameterAnnotations()),
					io.swagger.v3.oas.annotations.Parameter.class);
			if (parameterDoc != null) {
				if (parameterDoc.hidden() || parameterDoc.schema().hidden())
					continue;
				parameter = parameterBuilder.buildParameterFromDoc(parameterDoc, openAPI.getComponents(), methodAttributes.getJsonViewAnnotation());
				parameterInfo.setParameterModel(parameter);
			}
			parameter = requestBuilder.buildParams(parameterInfo, openAPI.getComponents(), requestMethod, null);

			addParameters(openAPI, requestMethod, methodAttributes, operation, methodParameter, parameterInfo, parameter);
		}
	}
}
 
/**
 * Create a new NamedValueInfo based on the given NamedValueInfo with sanitized values.
 */
private NamedValueInfo updateNamedValueInfo(MethodParameter parameter, NamedValueInfo info) {
	String name = info.name;
	if (info.name.length() == 0) {
		name = parameter.getParameterName();
		if (name == null) {
			throw new IllegalArgumentException("Name for argument type [" + parameter.getParameterType().getName() +
					"] not available, and parameter name information not found in class file either.");
		}
	}
	String defaultValue = (ValueConstants.DEFAULT_NONE.equals(info.defaultValue) ? null : info.defaultValue);
	return new NamedValueInfo(name, info.required, defaultValue);
}
 
/**
 * Create a new NamedValueInfo based on the given NamedValueInfo with
 * sanitized values.
 */
private NamedValueInfo updateNamedValueInfo(MethodParameter parameter, NamedValueInfo info) {
	String name = info.name;
	if (info.name.isEmpty()) {
		name = parameter.getParameterName();
		if (name == null) {
			String type = parameter.getNestedParameterType().getName();
			throw new IllegalArgumentException("Name for argument type [" + type + "] not " +
					"available, and parameter name information not found in class file either.");
		}
	}
	String defaultValue = (ValueConstants.DEFAULT_NONE.equals(info.defaultValue) ? null : info.defaultValue);
	return new NamedValueInfo(name, info.required, defaultValue);
}
 
@Override
public Object resolveArgument(MethodParameter parameter, Channel channel, Object object) throws Exception {
    RequestParam ann = parameter.getParameterAnnotation(RequestParam.class);
    String name = ann.name();
    if (name.isEmpty()) {
        name = parameter.getParameterName();
        if (name == null) {
            throw new IllegalArgumentException(
                    "Name for argument type [" + parameter.getNestedParameterType().getName() +
                            "] not available, and parameter name information not found in class file either.");
        }
    }

    if (!channel.hasAttr(REQUEST_PARAM)) {
        QueryStringDecoder decoder = new QueryStringDecoder(((FullHttpRequest) object).uri());
        channel.attr(REQUEST_PARAM).set(decoder.parameters());
    }

    Map<String, List<String>> requestParams = channel.attr(REQUEST_PARAM).get();
    List<String> arg = (requestParams != null ? requestParams.get(name) : null);
    TypeConverter typeConverter = beanFactory.getTypeConverter();
    if (arg == null) {
        if ("\n\t\t\n\t\t\n\uE000\uE001\uE002\n\t\t\t\t\n".equals(ann.defaultValue())) {
            return null;
        }else {
            return typeConverter.convertIfNecessary(ann.defaultValue(), parameter.getParameterType());
        }
    }
    if (List.class.isAssignableFrom(parameter.getParameterType())) {
        return typeConverter.convertIfNecessary(arg, parameter.getParameterType());
    } else {
        return typeConverter.convertIfNecessary(arg.get(0), parameter.getParameterType());
    }
}
 
private String getParameterName(MethodParameter param) {
	String paramName = param.getParameterName();
	return (paramName != null ? paramName : "Arg " + param.getParameterIndex());
}
 
源代码17 项目: statefulj   文件: StatefulFactory.java
@Override
public Object getSuggestedValue(DependencyDescriptor descriptor) {
	Object suggested = null;
	Field field = descriptor.getField();
	MethodParameter methodParameter = descriptor.getMethodParameter();

	boolean isStatefulFSM = false;
	String controllerId = null;
	Type genericFieldType = null;
	String fieldName = null;
	org.statefulj.framework.core.annotations.FSM fsmAnnotation = null;

	// If this is a StatefulFSM, parse out the Annotation and Type information
	//
	if (field != null) {
		if (isStatefulFSM(field)) {
			fsmAnnotation = field.getAnnotation(org.statefulj.framework.core.annotations.FSM.class);
			genericFieldType = field.getGenericType();
			fieldName = field.getName();
			isStatefulFSM = true;
		}
	} else if (methodParameter != null) {
		if (isStatefulFSM(methodParameter)) {
			fsmAnnotation = methodParameter.getParameterAnnotation(org.statefulj.framework.core.annotations.FSM.class);
			genericFieldType = methodParameter.getGenericParameterType();
			fieldName = methodParameter.getParameterName();
			isStatefulFSM = true;
		}
	}

	// If this is a StatefulFSM field, then resolve bean reference
	//
	if (isStatefulFSM) {

		// Determine the controllerId - either explicit or derived
		//
		controllerId = getControllerId(fsmAnnotation);
		if (StringUtils.isEmpty(controllerId)) {

			// Get the Managed Class
			//
			Class<?> managedClass = getManagedClass(fieldName, genericFieldType);

			// Fetch the Controller from the mapping
			//
			controllerId = deriveControllerId(fieldName, managedClass);
		}

		ReferenceFactory refFactory = new ReferenceFactoryImpl(controllerId);
		suggested = appContext.getBean(refFactory.getStatefulFSMId());
	}


	return (suggested != null) ? suggested : super.getSuggestedValue(descriptor);
}
 
private String getParameterName(MethodParameter param) {
	String paramName = param.getParameterName();
	return (paramName != null ? paramName : "Arg " + param.getParameterIndex());
}
 
源代码19 项目: java-trader   文件: NodeServiceImpl.java
/**
 * 根据path找到并发现REST Controller
 */
public static NodeMessage controllerInvoke(RequestMappingHandlerMapping requestMappingHandlerMapping, NodeMessage reqMessage) {
    String path = ConversionUtil.toString(reqMessage.getField(NodeMessage.FIELD_PATH));
    //匹配合适的
    Object result = null;
    Throwable t = null;
    RequestMappingInfo reqMappingInfo=null;
    HandlerMethod reqHandlerMethod = null;
    Map<RequestMappingInfo, HandlerMethod> map = requestMappingHandlerMapping.getHandlerMethods();
    for(RequestMappingInfo info:map.keySet()) {
        List<String> matches = info.getPatternsCondition().getMatchingPatterns(path);
        if ( matches.isEmpty() ) {
            continue;
        }
        reqMappingInfo = info;
        reqHandlerMethod = map.get(info);
        break;
    }

    if ( reqMappingInfo==null ) {
        t = new Exception("Controller for "+path+" is not found");
        logger.error("Controller for "+path+" is not found");
    } else {
        MethodParameter[] methodParams = reqHandlerMethod.getMethodParameters();
        Object[] params = new Object[methodParams.length];
        try{
            for(int i=0;i<methodParams.length;i++) {
                MethodParameter param = methodParams[i];
                String paramName = param.getParameterName();
                params[i] = ConversionUtil.toType(param.getParameter().getType(), reqMessage.getField(paramName));
                if ( params[i]==null && !param.isOptional() ) {
                    throw new IllegalArgumentException("Method parameter "+paramName+" is missing");
                }
            }
            result = reqHandlerMethod.getMethod().invoke(reqHandlerMethod.getBean(), params);
        }catch(Throwable ex ) {
            if ( ex instanceof InvocationTargetException ) {
                t = ((InvocationTargetException)ex).getTargetException();
            }else {
                t = ex;
            }
            logger.error("Invoke controller "+path+" with params "+Arrays.asList(params)+" failed: "+t, t);
        }
    }
    NodeMessage respMessage = reqMessage.createResponse();
    if ( t!=null ) {
        respMessage.setErrCode(-1);
        respMessage.setErrMsg(t.toString());
    } else {
        respMessage.setField(NodeMessage.FIELD_RESULT, JsonUtil.object2json(result));
    }
    return respMessage;
}
 
private String getParameterName(MethodParameter param) {
	String paramName = param.getParameterName();
	return (paramName != null ? paramName : "Arg " + param.getParameterIndex());
}