解決moco框架API在post請求json參數狀況下query失效的問題

在使用moco API作接口虛擬化的過程當中遇到一個比較棘手的問題,就是根據官方文檔提供的案例,並不能跑通post請求在處理json傳參格式的虛擬化。通過查詢源碼,發現了一個問題:
源碼:java

public class ParamRequestExtractor extends HttpRequestExtractor<String[]> {
    private final String param;

    public ParamRequestExtractor(final String param) {
        this.param = param;
    }

    @Override
    protected Optional<String[]> doExtract(final HttpRequest request) {
        String[] reference = request.getQueries().get(this.param);
        return fromNullable(reference);
    }
}

在獲取請求的內容時,發現該方法不能獲取到正確的請求參數,後來索性本身重寫了一個Extractor類,內容以下:git

package com.fun.moco.support;

import com.github.dreamhead.moco.HttpRequest;
import com.github.dreamhead.moco.HttpRequestExtractor;
import com.github.dreamhead.moco.RequestExtractor;
import com.google.common.base.Optional;
import net.sf.json.JSONObject;

import static com.github.dreamhead.moco.util.Preconditions.checkNotNullOrEmpty;
import static com.google.common.base.Optional.fromNullable;

/**
 * json數據格式參數值的獲取
 */
@SuppressWarnings("all")
public class JsonExtractor extends HttpRequestExtractor<String[]> {

    private final String param;

    public JsonExtractor(final String param) {
        this.param = param;
    }

    @Override
    protected Optional<String[]> doExtract(HttpRequest request) {
        try {
            String s = request.getContent().toString();
            String value = JSONObject.fromObject(s).getString(param);
            return fromNullable(new String[]{value});
        } catch (Exception e) {
            return fromNullable(new String[]{""});
        }
    }

    /**
     * 獲取參數的value
     *
     * @param param
     * @return
     */
    public static RequestExtractor<String[]> queryJson(final String param) {
        return new JsonExtractor(checkNotNullOrEmpty(param, "參數不能爲空!"));
    }
}

groovy使用方法以下:github

/**
 * get請求參數是否相等
 * @param key
 * @param value
 * @return
 */
    static RequestMatcher eqArgs(String key, String value) {
        eq query(key), value
    }

/**
 * post請求json數據參數是否相等
 * @param key
 * @param value
 * @return
 */
    static RequestMatcher eqParams(String key, String value) {
        eq queryJson(key), value
    }
groovy是一種基於JVM的動態語言,我以爲最大的優點有兩點,第一:於java兼容性很是好,大部分時候吧groovy的文件後綴改爲java直接能夠用,反之亦然。java的絕大部分庫,groovy都是能夠直接拿來就用的。這還帶來了另一個有點,學習成本低,很是低,直接上手沒問題,能夠慢慢學習groovy不一樣於Java的語法;第二:編譯器支持變得更好,如今用的intellij的ide,整體來講已經比較好的支持groovy語言了,寫起代碼來也是比較順滑了,各類基於groovy的框架工具也比較溜,特別是Gradle構建工具,比Maven爽不少。----此段文字爲了撐字數強加的,與內容無關。

歡迎有興趣的童鞋一塊兒交流json

相關文章
相關標籤/搜索