转载

使用stub进行快速迭代开发

现在趋向于前台和后台分层开发

前端调用后台接口获取数据,然后在页面展示.

但是有时候前台(静态资源)和后台联调时很麻烦:

(1)后台依赖协作方,里面的内容很难遍历各种情况;

(2)后台的数据修改起来很麻烦,因为我们没法直接修改数据库,因为数据库在协作方那里.

所以我想到了一个解决方法: stub

先看下我是如何操作的.

我使用 JMeter 进行接口测试

使用stub进行快速迭代开发

执行结果如下:

使用stub进行快速迭代开发

但是,你们知道返回的数据来自哪里吗?

来自于如下文件:

使用stub进行快速迭代开发

orderContent.json的内容就是返回结果:

使用stub进行快速迭代开发

所以你想要返回什么内容,就可以直接修改对应的.json 文件.

规范:

比如你访问路径:/tv_mobile/stub/appstore/orderContent

那么stub目录下面一定有一个文件夹叫appstore,appstore 下面一定有一个文件orderContent.json

再比如你访问路径:/tv_mobile/stub/orgList

那么stub目录下面一定有一个文件叫orgList.json

项目使用spring MVC 框架

核心控制器:

package com.web.controller.comm;  import java.io.FileInputStream; import java.io.IOException;  import javax.servlet.http.HttpServletRequest;  import org.apache.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;  import com.common.util.SystemHWUtil; import com.common.util.WebServletUtil; import com.io.hw.file.util.FileUtils; import com.util.JSONPUtil;  /***  * 用于stub  *   * @author huangweii 2015年5月29日  */ @Controller @RequestMapping("/stub") public class StubController {  protected Logger logger = Logger.getLogger(this.getClass());  public static final String stub_folder = "stub/";  public static final String stub_file_Suffix = ".json";   /***   *    * @param request   * @param action   * @param callback   * @return   */  @ResponseBody  @RequestMapping(value = "/{action}", produces = SystemHWUtil.RESPONSE_CONTENTTYPE_JSON_UTF)  public String corsJsonSimple(HttpServletRequest request,    @PathVariable String action, String callback) {   String content = null;   content = stub(request, stub_folder + action + stub_file_Suffix);   return JSONPUtil.getJsonP(content, callback);  }   /***   *    * @param request   * @param namespace   * @param action   * @param callback   * @return   */  @ResponseBody  @RequestMapping(value = "/{namespace}/{action}", produces = SystemHWUtil.RESPONSE_CONTENTTYPE_JSON_UTF)  public String corsJsonSimple(HttpServletRequest request,    @PathVariable String namespace, @PathVariable String action,    String callback) {   String content = null;   content = stub(request, stub_folder + namespace + "/" + action     + stub_file_Suffix);   return JSONPUtil.getJsonP(content, callback);  }  private String stub(HttpServletRequest request, String path) {   return stub(request, path, SystemHWUtil.CURR_ENCODING);  }  /***   * 读取文件   * @param request   * @param path   * @param charset   * @return   */  private String stub(HttpServletRequest request, String path,String charset) {   String content = null;   try {    String realPath2 = WebServletUtil.getRealPath(request, path);    java.io.InputStream input = new FileInputStream(realPath2);    content = FileUtils.getFullContent2(input,charset);   } catch (java.io.FileNotFoundException ex) {    ex.printStackTrace();   } catch (IOException e) {    e.printStackTrace();   }   return content;  }  }

核心方法:

/**   * 获取相对地址的绝对地址   *    * @param request   * @param relativePath   * @return   */  public static String getRealPath(HttpServletRequest request, String relativePath) {   return request.getSession().getServletContext().getRealPath(relativePath);  }
正文到此结束
Loading...