使用Swagger生成的客户端和服务器类

时间:2017-10-04 19:52:07

标签: java rest jersey swagger jersey-2.0

在我的一个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;
    }

也许问题不在生成的类中,而是在:

  • 在我的网络服务器配置中。我正在使用&#39; Wildfly 10.x&#39;
  • 在我的泽西配置中&#39; web.xml&#39;

有什么想法吗?

0 个答案:

没有答案