3

我正在使用swagger-codegen以 Objective C 语言生成客户端 SDK。我的 API 之一是采用布尔参数。参数在Swagger 规范中定义如下:

"parameters": [
    {
        "name": "recursive",
        "in": "query",
        "description": "",
        "required": false,
        "type": "boolean"
    }
]

生成的客户端 SDK 正在检查BOOLvariabe 是否为nil. BOOL是 Objective C 中的原始类型,无法检查nil. 它导致编译错误。

-(NSNumber*) folderDeleteFolderWithCompletionBlock: (NSString*) path recursive: (BOOL) recursive {
    ...
    if(recursive != nil)
    {
        queryParams[@"recursive"] = recursive;
    }
    ...
}

如果我们使用 NSNumber+ (NSNumber *)numberWithBool:(BOOL)value代替 BOOL,则可以解决此问题。如何将booleanswagger 规范映射到NSNumber客户端 SDK?

我在ObjcClientCodegen.java中做了一些更改,例如替换以下行

typeMapping.put("boolean", "BOOL");

typeMapping.put("boolean", "NSNumber");

即使我BOOLdefaultIncludesHashSets中languageSpecificPrimitives删除

defaultIncludes = new HashSet<String>(
            Arrays.asList(
                    /*"bool",
                    "BOOL",*/
                    "int",
                    "NSString",
                    "NSObject",
                    "NSArray",
                    "NSNumber",
                    "NSDate",
                    "NSDictionary",
                    "NSMutableArray",
                    "NSMutableDictionary")
);
languageSpecificPrimitives = new HashSet<String>(
            Arrays.asList(
                    "NSNumber",
                    "NSString",
                    "NSObject",
                    "NSDate"/*,
                    "bool",
                    "BOOL"*/)
);

尽管这个生成的客户端 SDK 使用的是 BOOL 数据类型而不是 NSNumber。

在这方面的任何帮助将不胜感激。

4

1 回答 1

1

最新版本的Swagger-Codegen已解决此问题。

于 2015-11-15T09:21:35.083 回答