Search in sources :

Example 1 with ConversionException

use of cn.taketoday.core.conversion.ConversionException in project today-framework by TAKETODAY.

the class AbstractNamedValueResolvingStrategy method resolveParameter.

@Nullable
@Override
public final Object resolveParameter(RequestContext context, ResolvableMethodParameter resolvable) throws Throwable {
    MethodParameter methodParameter = resolvable.getParameter();
    NamedValueInfo namedValueInfo = resolvable.getNamedValueInfo();
    MethodParameter nestedParameter = methodParameter.nestedIfOptional();
    Object arg;
    if (namedValueInfo.nameEmbedded) {
        Object resolvedName = resolveEmbeddedValuesAndExpressions(namedValueInfo.name);
        if (resolvedName == null) {
            throw new IllegalArgumentException("Specified name must not resolve to null: [" + namedValueInfo.name + "]");
        }
        arg = resolveName(resolvedName.toString(), resolvable, context);
    } else {
        arg = resolveName(namedValueInfo.name, resolvable, context);
    }
    if (arg == null) {
        if (namedValueInfo.defaultValue != null) {
            arg = resolveEmbeddedValuesAndExpressions(namedValueInfo.defaultValue);
        } else if (namedValueInfo.required && !nestedParameter.isOptional()) {
            handleMissingValue(namedValueInfo.name, nestedParameter, context);
        }
        arg = handleNullValue(namedValueInfo.name, arg, nestedParameter.getNestedParameterType());
    } else if ("".equals(arg) && namedValueInfo.defaultValue != null) {
        arg = resolveEmbeddedValuesAndExpressions(namedValueInfo.defaultValue);
    }
    if (configurableBeanFactory != null) {
        ConversionService conversionService = configurableBeanFactory.getConversionService();
        if (conversionService != null) {
            try {
                arg = conversionService.convert(arg, resolvable.getTypeDescriptor());
            } catch (ConversionException e) {
                throw new ParameterConversionException(methodParameter, arg, e);
            }
            // Check for null value after conversion of incoming argument value
            if (arg == null && namedValueInfo.defaultValue == null && namedValueInfo.required && !nestedParameter.isOptional()) {
                handleMissingValueAfterConversion(namedValueInfo.name, nestedParameter, context);
            }
        }
    }
    handleResolvedValue(arg, namedValueInfo.name, resolvable, context);
    return arg;
}
Also used : ConversionException(cn.taketoday.core.conversion.ConversionException) NamedValueInfo(cn.taketoday.web.handler.method.NamedValueInfo) ConversionService(cn.taketoday.core.conversion.ConversionService) ResolvableMethodParameter(cn.taketoday.web.handler.method.ResolvableMethodParameter) MethodParameter(cn.taketoday.core.MethodParameter) Nullable(cn.taketoday.lang.Nullable)

Aggregations

MethodParameter (cn.taketoday.core.MethodParameter)1 ConversionException (cn.taketoday.core.conversion.ConversionException)1 ConversionService (cn.taketoday.core.conversion.ConversionService)1 Nullable (cn.taketoday.lang.Nullable)1 NamedValueInfo (cn.taketoday.web.handler.method.NamedValueInfo)1 ResolvableMethodParameter (cn.taketoday.web.handler.method.ResolvableMethodParameter)1