2016-08-26 15 views
0

我是新來的用於Java源代碼轉換的勺子庫。嘗試使用它來轉換現有的REST服務。要求是在類級別添加註釋io.swagger.annotations.SwaggerDefinition,如:添加批註SwaggerDefinition在課程級別問題

@SwaggerDefinition(
     tags = { 
      @Tag(
        name = "api name", description = "api description" 
       ) 
       } 
) 

所面臨的問題是,當我加入註解,它被添加爲:

@SwaggerDefinition(
     tags = 
      @Tag(
        name = "api name", description = "api description" 
       )     
) 

:丟失的大括號「{」和匹配閉括號「}」

以下是正在使用的功能:

private CtAnnotation createSwaggerDefinitionAnnotation(CtClass<?> ctClass) throws JSONException { 

     CtAnnotation tagAnnotation = createTagAnnotation(ctClass); 

     CtAnnotation swaggerDefAnnotation = getFactory().Core().createAnnotation(); 
     CtTypeReference<Object> ref = getFactory().Core().createTypeReference(); 
     ref.setSimpleName("SwaggerDefinition"); 

     CtPackageReference refPackage = getFactory().Core().createPackageReference(); 
     refPackage.setSimpleName("io.swagger.annotations"); 
     ref.setPackage(refPackage); 
     swaggerDefAnnotation.setAnnotationType(ref); 

     swaggerDefAnnotation.addValue("tags", tagAnnotation); // TODO: The tag should be wrapped in curly braces 

     return swaggerDefAnnotation; 
    } 

private CtAnnotation createTagAnnotation(CtClass<?> ctClass) { 

     String className = ctClass.getQualifiedName(); 

     CtAnnotation tagAnnotation = getFactory().Core().createAnnotation(); 
     CtTypeReference<Object> ref = getFactory().Core().createTypeReference(); 
     ref.setSimpleName("Tag"); 

     CtPackageReference refPackage = getFactory().Core().createPackageReference(); 
     refPackage.setSimpleName("io.swagger.annotations"); 
     ref.setPackage(refPackage); 
     tagAnnotation.setAnnotationType(ref); 

     tagAnnotation.addValue("name", getSwaggerDefinitionTagName(className)); 
     tagAnnotation.addValue("description", getSwaggerDefinitionTagDescription(className)); 
     return tagAnnotation; 
    } 

有人可以識別缺失的部分。我無法弄清楚。

回答

0

爲了圍繞值添加大括號,您需要創建一個包含註釋值的CtNewArray。

private CtAnnotation createSwaggerDefinitionAnnotation(CtClass<?> ctClass) { 

    CtAnnotation tagAnnotation = createTagAnnotation(ctClass); 

    CtAnnotation swaggerDefAnnotation = getFactory().Core().createAnnotation(); 
    CtTypeReference<Object> ref = getFactory().Core().createTypeReference(); 
    ref.setSimpleName("SwaggerDefinition"); 

    CtPackageReference refPackage = getFactory().Core().createPackageReference(); 
    refPackage.setSimpleName("io.swagger.annotations"); 
    ref.setPackage(refPackage); 
    swaggerDefAnnotation.setAnnotationType(ref); 

    CtNewArray<Object> arrayValue = getFactory().Core().createNewArray(); 
    arrayValue.addElement(tagAnnotation); 
    swaggerDefAnnotation.addValue("tags", arrayValue); 

    return swaggerDefAnnotation; 
} 

輸出繼電器:

@io.swagger.annotations.SwaggerDefinition(
tags = { 
    @io.swagger.annotations.Tag(
      description = "description", name = "name") 
}) 
+0

十分感謝@Thomas!有效 – sanjay