Example usage for org.springframework.core MethodParameter getParameterAnnotation

List of usage examples for org.springframework.core MethodParameter getParameterAnnotation

Introduction

In this page you can find the example usage for org.springframework.core MethodParameter getParameterAnnotation.

Prototype

@SuppressWarnings("unchecked")
@Nullable
public <A extends Annotation> A getParameterAnnotation(Class<A> annotationType) 

Source Link

Document

Return the parameter annotation of the given type, if available.

Usage

From source file:net.kaczmarzyk.spring.data.jpa.web.SimpleSpecificationResolver.java

@Override
public Specification<?> resolveArgument(MethodParameter param, ModelAndViewContainer mav, NativeWebRequest req,
        WebDataBinderFactory binderFactory) throws Exception {

    Spec def = param.getParameterAnnotation(Spec.class);

    return buildSpecification(req, def);
}

From source file:ch.rasc.wampspring.method.PayloadArgumentResolver.java

@Override
public Object resolveArgument(MethodParameter param, Message<?> message) throws Exception {
    Payload ann = param.getParameterAnnotation(Payload.class);
    if (ann != null && StringUtils.hasText(ann.value())) {
        throw new IllegalStateException("@Payload SpEL expressions not supported by this resolver");
    }//w  w  w . j a  v  a2 s  .com

    Object payload = message.getPayload();
    if (isEmptyPayload(payload)) {
        if (ann == null || ann.required()) {
            String paramName = getParameterName(param);
            BindingResult bindingResult = new BeanPropertyBindingResult(payload, paramName);
            bindingResult.addError(new ObjectError(paramName, "@Payload param is required"));
            throw new MethodArgumentNotValidException(message, param, bindingResult);
        }
        return null;
    }

    Class<?> targetClass = param.getParameterType();
    if (ClassUtils.isAssignable(targetClass, payload.getClass())) {
        validate(message, param, payload);
        return payload;
    }

    payload = this.methodParameterConverter.convert(param, message.getPayload());
    if (payload == null) {
        throw new MessageConversionException(message,
                "No converter found to convert to " + targetClass + ", message=" + message);
    }

    validate(message, param, payload);
    return payload;
}

From source file:cn.guoyukun.spring.jpa.web.bind.method.annotation.SearchableMethodArgumentResolver.java

private SearchableDefaults getSearchableDefaults(MethodParameter parameter) {
    //?//from  w w w . j a va 2 s .  c om
    SearchableDefaults searchDefaults = parameter.getParameterAnnotation(SearchableDefaults.class);
    //?
    if (searchDefaults == null) {
        searchDefaults = parameter.getMethodAnnotation(SearchableDefaults.class);
    }
    return searchDefaults;
}

From source file:org.focusns.common.web.widget.mvc.method.WidgetMethodArgumentResolver.java

private Object getWidgetAttributeValue(MethodParameter parameter, NativeWebRequest webRequest) {
    Class<?> widgetClass = parameter.getMethod().getDeclaringClass();
    WidgetAttribute widgetAttribute = parameter.getParameterAnnotation(WidgetAttribute.class);
    if (widgetAttribute != null) {
        String widgetAttributeName = getWidgetAttributeName(parameter, widgetAttribute);
        Object value = webRequest.getAttribute(widgetAttributeName, WebRequest.SCOPE_REQUEST);
        if (widgetAttribute.required()) {
            Assert.notNull(value,// w w  w  .  j a  va  2  s  .co m
                    String.format("%s attribute %s can not be null!", widgetClass, widgetAttributeName));
        }
        return value;
    }
    //
    return null;
}

From source file:com.gary.web.spring.method.annotation.RequestJsonParamMethodArgumentResolver.java

@Override
protected Object resolveName(String name, MethodParameter parameter, NativeWebRequest webRequest)
        throws Exception {
    RequestJsonParam annotation = parameter.getParameterAnnotation(RequestJsonParam.class);
    String[] paramValues = webRequest.getParameterValues(name);
    Class<?> paramType = parameter.getParameterType();
    if (paramValues == null) {
        return null;

    }/*from  www. j ava2s  .c o  m*/

    try {
        if (paramValues.length == 1) {
            String text = paramValues[0];
            Type type = parameter.getGenericParameterType();

            if (MapWapper.class.isAssignableFrom(paramType)) {
                MapWapper<?, ?> jsonMap = (MapWapper<?, ?>) paramType.newInstance();

                MapType mapType = (MapType) getJavaType(HashMap.class);

                if (type instanceof ParameterizedType) {
                    mapType = (MapType) mapType
                            .narrowKey((Class<?>) ((ParameterizedType) type).getActualTypeArguments()[0]);
                    mapType = (MapType) mapType.narrowContentsBy(
                            (Class<?>) ((ParameterizedType) type).getActualTypeArguments()[1]);
                }
                jsonMap.setInnerMap(mapper.<Map>readValue(text, mapType));
                return jsonMap;
            }

            JavaType javaType = getJavaType(paramType);

            if (Collection.class.isAssignableFrom(paramType)) {
                javaType = javaType
                        .narrowContentsBy((Class<?>) ((ParameterizedType) type).getActualTypeArguments()[0]);
            }

            return mapper.readValue(paramValues[0], javaType);
        }

    } catch (Exception e) {
        throw new JsonMappingException("Could not read request json parameter", e);
    }

    throw new UnsupportedOperationException("too many request json parameter '" + name
            + "' for method parameter type [" + paramType + "], only support one json parameter");
}

From source file:org.chtijbug.drools.platform.web.annotation.JsonPathArgumentResolver.java

@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
        NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
    String body = getRequestBody(webRequest);
    JSONArray jsonArray = JsonPath.read(body, parameter.getParameterAnnotation(JsonArg.class).value());
    JavaType collectionType = TypeFactory.defaultInstance().constructType(parameter.getGenericParameterType());
    return objectMapper.readValue(jsonArray.toJSONString(), collectionType);
}

From source file:com.ufukuzun.myth.dialect.handler.AjaxRequestResponseBodyReturnValueHandler.java

@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
        NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
    AjaxRequestBody ajaxRequestBody = parameter.getParameterAnnotation(AjaxRequestBody.class);
    boolean performValidation = ajaxRequestBody.validate();
    String targetName = ajaxRequestBody.targetName();
    Assert.notNull(targetName);//from  w  w w  . j a  v  a2 s .  c  o m

    Object argument = readWithMessageConverters(webRequest, parameter, parameter.getGenericParameterType());

    if (argument != null && AjaxRequest.class.isInstance(argument) && !StringUtils.isEmpty(targetName)) {
        AjaxRequest<?> ajaxRequest = (AjaxRequest<?>) argument;

        mavContainer.addAttribute(targetName, ajaxRequest.getModel());

        if (performValidation) {
            ajaxRequest
                    .setModelValid(myth.validate(mavContainer.getModel(), ajaxRequest.getModel(), targetName));
        }
    }

    return argument;
}

From source file:org.opentides.web.processor.FormBindMethodProcessor.java

/**
 * Resolve the argument from the model or if not found instantiate it with
 * its default. The model attribute is then populated with request values 
 * via data binding and validated. If no validation error, the model
 * is retrieved from database and merged with the submitted form.
 *   //from w  w w  . j  a  v  a  2  s.  c  o  m
 * @throws BindException if data binding and validation result in an error
 * @throws Exception if WebDataBinder initialization fails.
 */
@SuppressWarnings("unchecked")
public final Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
        NativeWebRequest nativeRequest, WebDataBinderFactory binderFactory) throws Exception {

    FormBind annot = parameter.getParameterAnnotation(FormBind.class);
    Class<?> clazz = parameter.getDeclaringClass();
    String name = getName(annot, parameter);
    HttpServletRequest request = (HttpServletRequest) nativeRequest.getNativeRequest();

    Method addForm = CacheUtil.getNewFormBindMethod(clazz);
    Object controller = beanFactory.getBean(parameter.getContainingClass());
    Object target = (addForm != null) ? addForm.invoke(controller, request)
            : BeanUtils.instantiateClass(parameter.getParameterType());
    MutablePropertyValues mpvs = new MutablePropertyValues(nativeRequest.getParameterMap());
    WebDataBinder binder = binderFactory.createBinder(nativeRequest, target, name);
    if (binder.getTarget() != null) {
        binder.bind(mpvs);
        if (binder.getValidator() != null)
            binder.validate();
        if (binder.getBindingResult().hasErrors()) {
            throw new BindException(binder.getBindingResult());
        }
        String method = request.getMethod().toLowerCase();

        // id should be the last segment of the uri
        String uri = request.getRequestURI();
        String sid = uri.substring(uri.lastIndexOf("/") + 1);
        Long id = StringUtil.convertToLong(sid, 0);

        // if target extends BaseEntity and for update, link target to database record
        if (("put".equals(method) || "post".equals(method)) && id > 0
                && BaseEntity.class.isAssignableFrom(parameter.getParameterType())) {
            // now retrieve record from database for updating
            Method updateForm = CacheUtil.getUpdateFormBindMethod(clazz);

            BaseEntity record = null;
            if (updateForm == null) {
                // no annotation, invoke from service
                Method getService = controller.getClass().getMethod("getService");
                if (getService == null) {
                    String message = "Cannot find method with @FormBind with update mode. "
                            + "Also, unable to find service associated to controller."
                            + "Please specify one that retrieves record from database.";
                    throw new InvalidImplementationException(message);
                }
                BaseCrudService<? extends BaseEntity> service = (BaseCrudService<? extends BaseEntity>) getService
                        .invoke(controller);
                record = (BaseEntity) service.load(sid);
            } else {
                // with annotation, invoke annotation
                record = (BaseEntity) updateForm.invoke(controller, sid, request);
            }

            if (record != null) {
                WebDataBinder updateBinder = binderFactory.createBinder(nativeRequest, record, name);
                updateBinder.bind(mpvs);
                mavContainer.addAllAttributes(updateBinder.getBindingResult().getModel());
                return updateBinder.getTarget();
            } else {
                String message = "Unable to find " + parameter.getParameterType().getSimpleName() + " with id="
                        + sid + " for update.";
                throw new DataAccessException(message);
            }
        } else if ("post".equals(method)) {
            mavContainer.addAllAttributes(binder.getBindingResult().getModel());
            return binder.getTarget();
        } else {
            throw new InvalidImplementationException(
                    "@FormBind argument annotation can only be used on POST or PUT methods.");
        }
    }
    mavContainer.addAllAttributes(binder.getBindingResult().getModel());
    return binder.getTarget();
}

From source file:cn.guoyukun.spring.jpa.web.bind.method.annotation.PageableMethodArgumentResolver.java

private String getSortPrefix(MethodParameter parameter) {

    Qualifier qualifier = parameter.getParameterAnnotation(Qualifier.class);

    if (qualifier != null) {
        return new StringBuilder(qualifier.value()).append("_").append(sortPrefix).toString();
    }//from w  ww. ja v a2  s.com

    return sortPrefix;
}

From source file:cn.guoyukun.spring.jpa.web.bind.method.annotation.PageableMethodArgumentResolver.java

/**
 * Resolves the prefix to use to bind properties from. Will prepend a possible {@link Qualifier} if available or
 * return the configured prefix otherwise.
 *
 * @param parameter//w w w . j  a  v  a 2 s  .  c  o m
 * @return
 */
private String getPagePrefix(MethodParameter parameter) {

    Qualifier qualifier = parameter.getParameterAnnotation(Qualifier.class);

    if (qualifier != null) {
        return new StringBuilder(((Qualifier) qualifier).value()).append("_").append(pagePrefix).toString();
    }

    return pagePrefix;
}