迭代复杂的自定义注释数组

时间:2013-04-11 08:39:46

标签: spring annotations javadoc

我创建了一个嵌套的自定义注释。我的代码在这里

@StatusCode(statusArray = {
          @StatusCodesArray(key="200", value="value is ok"),
          @StatusCodesArray(key="400", value="resource not available"),
          @StatusCodesArray(key="400", value="resource not available"),
          @StatusCodesArray(key="400", value="resource not available")
        })

现在我正在创建java doc以通过Doclet API(here)显示这些状态代码,但无法交换内部statusCodes值,但是我能够迭代这样的简单注释

AnnotationDesc annotationDesc = getAnnotation(method, "StatusCode");
ElementValuePair[] paramNames = annotationDesc.elementValues(); 

返回StatusCode注释的值,但是如何迭代StatusCodes值?任何帮助都是适当的。

2 个答案:

答案 0 :(得分:3)

尝试了很多。我找到了解决方案。有两种方法可以迭代数组注释类型。 首先,如果我们使用Method API(java.lang.reflect)那么它将非常简单,正如Marius在他的回答中所说的那样。

第二个是当我们使用doclet(导入com.sun.javadoc.MethodDoc api和其他)时,它有点trikier.First获取你的MethodDoc对象,通过这个获取AnnotationDesc对象,你将在上面的问题中达到@StatusCode注释case.Suppose我有AnnotationDesc API的annotationDesc对象,然后使用下面的代码来迭代& statusCodeArray注释的值。

        ElementValuePair[] paramNames = annotationDesc.elementValues();
        AnnotationValue[] statusCodes = (AnnotationValue[])paramNames[0].value().value();
        if(statusCodes==null||statusCodes.length==0)
        {
            return statusCodeValue;
        }
        for(AnnotationValue statusCode:statusCodes)
        {
            AnnotationDesc anoDesc=(AnnotationDesc)statusCode.value();
            if(anoDesc==null)
            {
                return statusCodeValue;
            }
            String key=(String)anoDesc.elementValues()[0].value().value();
            String value=(String)anoDesc.elementValues()[1].value().value();

        }

您将在键值和状态注释中获取状态代码。

答案 1 :(得分:1)

尝试访问Annotation,因为您要在其中定义;

    // MZ: Parse the status code annotations
    StatusCode statusCodes = method.getAnnotation(StatusCode.class);
    if (statusCodes != null)
    {
        for (StatusCodesArray statusCodeArray : statusCodes.value())
        {
            // MZ: Do your magic
        }
    }

Gl!