在我的一个API Swagger规范中,我创建了一个这样的CSV数组参数:
...
- name: formats
in: query
description: The format(s) in which the generated report should be returned.
type: array
collectionFormat: csv
items:
type: string
enum:
- pdf
- png
...
然后通过' swagger-codegen'我使用-l' jaxrs'生成服务器类,使用-l' java'生成客户端类。
我遇到的问题是我的客户端类正在创建HTTP请求,如下所示:
http://.....:.../.../?...&formats=value1,value2& ...
当我的服务器类处理请求时,我得到的数组包含一个值为' value1,value2'
的String如果我的客户端类创建了这样的HTTP请求:
http://.....:.../.../?...&formats=value1&formats=value2& ....
然后我的服务器类将正确地实例化一个具有2个值的数组' value1'和' value2'
在我生成的客户端类中,生成查询字符串值的函数如下所示:
/**
* Format to {@code Pair} objects.
*
* @param collectionFormat collection format (e.g. csv, tsv)
* @param name Name
* @param value Value
* @return A list of Pair objects
*/
public List<Pair> parameterToPairs(String collectionFormat, String name, Object value){
List<Pair> params = new ArrayList<Pair>();
// preconditions
if (name == null || name.isEmpty() || value == null) return params;
Collection valueCollection = null;
if (value instanceof Collection) {
valueCollection = (Collection) value;
} else {
params.add(new Pair(name, parameterToString(value)));
return params;
}
if (valueCollection.isEmpty()){
return params;
}
// get the collection format
collectionFormat = (collectionFormat == null || collectionFormat.isEmpty() ? "csv" : collectionFormat); // default: csv
// create the params based on the collection format
if (collectionFormat.equals("multi")) {
for (Object item : valueCollection) {
params.add(new Pair(name, parameterToString(item)));
}
return params;
}
String delimiter = ",";
if (collectionFormat.equals("csv")) {
delimiter = ",";
} else if (collectionFormat.equals("ssv")) {
delimiter = " ";
} else if (collectionFormat.equals("tsv")) {
delimiter = "\t";
} else if (collectionFormat.equals("pipes")) {
delimiter = "|";
}
StringBuilder sb = new StringBuilder() ;
for (Object item : valueCollection) {
sb.append(delimiter);
sb.append(parameterToString(item));
}
params.add(new Pair(name, sb.substring(1)));
return params;
}
也许问题不在生成的类中,而是在:
有什么想法吗?