在使用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