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

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

/**
 * 有WxAsyncMessage注解且
 * 返回值是WxMessage的子类
 * 或者是CharSequence的子类,且有注解WxButton或者WXMessageMapping
 * 这里其实应该判断反向的,即不需要Async发送的。只有几个用户类型的消息不需要异步发送
 *
 * @param returnType
 * @return result
 */
@Deprecated
public boolean supportsReturnTypeOld(MethodParameter returnType) {
    // 如果是iterable或者array,都只能作为asyncMessage消息处理
    boolean isIterableType = Iterable.class.isAssignableFrom(returnType.getParameterType());
    boolean isArrayType = returnType.getParameterType().isArray();
    // 如果是群发消息,只能作为asyncMessage消息处理
    boolean isGroupMessage = WxGroupMessage.class.isAssignableFrom(returnType.getParameterType());
    // 如果是模板消息,只能作为asyncMessage消息处理
    boolean isTemplateMessage = WxTemplateMessage.class.isAssignableFrom(returnType.getParameterType());
    // 如果是模板消息,只能作为asyncMessage消息处理
    boolean isMiniProgramMessage = WxUserMessage.MiniProgram.class.isAssignableFrom(returnType.getParameterType());
    // 理论上WxAsyncMessage已经被上层处理过了,这里保险起见再处理一次
    boolean needAsyncSend = isIterableType || isArrayType || isGroupMessage || isTemplateMessage || isMiniProgramMessage;
    Class realType = getGenericType(returnType);
    boolean isWxMessage = WxMessage.class.isAssignableFrom(realType);
    boolean isWxStringMessage = CharSequence.class.isAssignableFrom(realType) &&
            returnType.hasMethodAnnotation(WxMapping.class);
    return needAsyncSend && (isWxMessage || isWxStringMessage);
}
 
@Override
public boolean supports(MethodParameter returnType,
                        Class<? extends HttpMessageConverter<?>> converterType) {
    return StringHttpMessageConverter.class.isAssignableFrom(converterType) &&
            CharSequence.class.isAssignableFrom(returnType.getParameterType()) &&
            returnType.hasMethodAnnotation(WxMapping.class);
}
 
@Override
public boolean supports(HandlerResult result) {
	MethodParameter returnType = result.getReturnTypeSource();
	Class<?> containingClass = returnType.getContainingClass();
	return (AnnotatedElementUtils.hasAnnotation(containingClass, ResponseBody.class) ||
			returnType.hasMethodAnnotation(ResponseBody.class));
}
 
@Override
protected boolean supportsReturnTypeInternal(MethodParameter returnType) {
    // 是否显式声明为async了,如果是则直接异步发送
    boolean isAsyncMessage = returnType.hasMethodAnnotation(WxAsyncMessage.class);
    // 是否是WxMapping,如果声明为wxMapping,则直接异步发送(因为这种类型没有必要同步,报错了还会返回到客户端提示异常,不友好)
    boolean isWxMapping = returnType.hasMethodAnnotation(WxMapping.class);
    return isAsyncMessage || isWxMapping;
}
 
@Override
public boolean supportsReturnType(MethodParameter returnType) {
    if (returnType.hasMethodAnnotation(WxMapping.class)) {
        return false;
    }
    ResolvableType resolvableType = ResolvableType.forMethodParameter(returnType);
    ResolvableType arrayType = ResolvableType.forArrayComponent(ResolvableType.forClass(WxMessage.class));
    ResolvableType iterableType = ResolvableType.forClassWithGenerics(Iterable.class, WxMessage.class);
    return arrayType.isAssignableFrom(resolvableType) || iterableType.isAssignableFrom(resolvableType);
}
 
@Override
public boolean supportsReturnType(MethodParameter returnType) {
	return (returnType.hasMethodAnnotation(SendTo.class) ||
			AnnotatedElementUtils.hasAnnotation(returnType.getDeclaringClass(), SendTo.class) ||
			returnType.hasMethodAnnotation(SendToUser.class) ||
			AnnotatedElementUtils.hasAnnotation(returnType.getDeclaringClass(), SendToUser.class) ||
			!this.annotationRequired);
}
 
@Override
public boolean supports(HandlerResult result) {
	MethodParameter returnType = result.getReturnTypeSource();
	Class<?> containingClass = returnType.getContainingClass();
	return (AnnotatedElementUtils.hasAnnotation(containingClass, ResponseBody.class) ||
			returnType.hasMethodAnnotation(ResponseBody.class));
}
 
@Override
protected boolean supportsReturnTypeInternal(MethodParameter returnType) {
    // 是否显式声明为async了,如果是不从这里发送
    boolean isAsyncMessage = returnType.hasMethodAnnotation(WxAsyncMessage.class);
    // 是否是WxMapping,如果声明为wxMapping,则不通过这里而是直接异步发送
    // 理论上可控制顺序来控制这里的判断减少,但是稳妥起见多判断一次
    boolean isWxMapping = returnType.hasMethodAnnotation(WxMapping.class);
    Class realType = getGenericType(returnType);
    // 对于非WxMapping的handler,判断返回类型是否是WxMessage,如果是则同步发送消息
    boolean isWxMessage = WxMessage.class.isAssignableFrom(realType);
    return !isAsyncMessage && !isWxMapping && isWxMessage;
}
 
@Override
public boolean supportsReturnType(MethodParameter returnType) {
	return (returnType.hasMethodAnnotation(SubscribeMapping.class) &&
			!returnType.hasMethodAnnotation(SendTo.class) &&
			!returnType.hasMethodAnnotation(SendToUser.class));
}
 
@Override
public boolean supportsReturnType(MethodParameter returnType) {
	return (AnnotatedElementUtils.hasAnnotation(returnType.getContainingClass(), ResponseBody.class) ||
			returnType.hasMethodAnnotation(ResponseBody.class));
}
 
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
	return returnType.hasMethodAnnotation(ResponseBody.class);
}
 
源代码12 项目: tools   文件: ExcelDrivenReadHandler.java
@Override
public boolean supportsReturnType(MethodParameter methodParameter) {
    return methodParameter.hasMethodAnnotation(ExcelRead.class);
}
 
@Override
public boolean supportsReturnType(MethodParameter returnType) {
	return (returnType.hasMethodAnnotation(SubscribeMapping.class) &&
			!returnType.hasMethodAnnotation(SendTo.class) &&
			!returnType.hasMethodAnnotation(SendToUser.class));
}
 
@Override
public boolean supportsReturnType(MethodParameter returnType) {
    return returnType.hasMethodAnnotation(WxMapping.class);
}
 
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
	return super.supports(returnType, converterType) && returnType.hasMethodAnnotation(JsonView.class);
}
 
@Override
public boolean supportsReturnType(MethodParameter returnType) {
	return (AnnotatedElementUtils.hasAnnotation(returnType.getContainingClass(), ResponseBody.class) ||
			returnType.hasMethodAnnotation(ResponseBody.class));
}
 
/**
 * Return {@code true} if there is a method-level {@code @ModelAttribute}
 * or, in default resolution mode, for any return value type that is not
 * a simple type.
 */
@Override
public boolean supportsReturnType(MethodParameter returnType) {
	return (returnType.hasMethodAnnotation(ModelAttribute.class) ||
			(this.annotationNotRequired && !BeanUtils.isSimpleProperty(returnType.getParameterType())));
}
 
源代码18 项目: lams   文件: JsonViewResponseBodyAdvice.java
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
	return super.supports(returnType, converterType) && returnType.hasMethodAnnotation(JsonView.class);
}
 
源代码19 项目: lams   文件: RequestResponseBodyMethodProcessor.java
@Override
public boolean supportsReturnType(MethodParameter returnType) {
	return (AnnotatedElementUtils.hasAnnotation(returnType.getContainingClass(), ResponseBody.class) ||
			returnType.hasMethodAnnotation(ResponseBody.class));
}
 
源代码20 项目: uavstack   文件: JSONPResponseBodyAdvice.java
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {


        return FastJsonHttpMessageConverter.class.isAssignableFrom(converterType)
                &&
                (returnType.getContainingClass().isAnnotationPresent(ResponseJSONP.class) || returnType.hasMethodAnnotation(ResponseJSONP.class));
    }