2016-08-26 1 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; 
} 

Ouput:

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

Большое спасибо @Thomas! Это сработало – sanjay