使用HttpServlet写接口

背景:

  今天来了个大活儿:对外提供三个接口,接口的功能分别是按月来取数据、按天来取数据、按id来取数据。

下面是我定义的接口的详细文档:

月数据用于返回某些部门单月的原创稿件数据;

天数据用于返回某些部门单天的原创稿件数据;

文章详情则返回某些文章的详细数据,使用根据zbGuid去对应库获取信息。

请求方式:POST。

校验:

如果安全校验未通过,则会返回错误信息,示意如下:

{

 

   "Records": "error!",

 

   "message": "请传递合适的参数!"

 

}

原创稿月数据

接口地址:

正式环境根地址http://********/casData/depOriginal?type=month

测试环境根地址http://********/testCAS/casData/depOriginal?type=month

接口参数:

departmentIds=部门Id,多个以英文半角逗号分隔  例如136,135

pubMonth=发表月份YYYYMM格式,例如201703

原创稿天数据

接口地址:

正式环境根地址http://********/casData/depOriginal?type=day

测试环境根地址http://********/casData/depOriginal?type=day

接口参数:

departmentIds=部门Id,多个以英文半角逗号分隔  例如136,135

pubDay=发表日期YYYYMMDD格式,例如20170301

原创稿文章详情数据

接口地址:

正式环境根地址http://********/casData/depOriginal?type=article

测试环境根地址http://********/casData/depOriginal?type= article

接口参数:

zbGuids=文章的zbGuid多个以英文半角逗号隔开

--------------------------------------------------------------------------

  终于费了九牛二虎之力将接口文档写完了。但是,真正的工作才刚刚开始:下面讲的是如何在项目里添加功能:

 

public class CasDataApiServlet extends HttpServlet{


     @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String returnJson = ""; String pathInfo = request.getPathInfo(); if ("/depOriginal".equals(pathInfo)){ returnJson = queryDepOriginal(request, response); } ResponseUtil.json(response, returnJson); } }

 

 

	private String queryDepOriginal(HttpServletRequest request, HttpServletResponse response) {
		String returnJson = "";
		String type = RequestUtil.getParameter(request, "type", "");
		LOG.info("type = {}", type);
		if (type.equals("month")) {
			// 原创稿月数据
			String departmentIds = RequestUtil.getParameter(request, "departmentIds", "");
			String pubMonth = RequestUtil.getParameter(request, "pubMonth", "");
			if (StringHelper.isEmpty(departmentIds) || StringHelper.isEmpty(pubMonth)) {
				returnJson = "{\"Records\":\"error!\",\"message\":\"请传递合适的值!\"}";
			} else {
				returnJson = statDepartmentOrignalDayService.getApiJsonByDepIdAndMonth(departmentIds, pubMonth);
			}
		} else if (type.equals("day")) {
			// 原创稿天数据
			String departmentIds = RequestUtil.getParameter(request, "departmentIds", "");
			String pubDay = RequestUtil.getParameter(request, "pubDay", "");
			if (StringHelper.isEmpty(departmentIds) || StringHelper.isEmpty(pubDay)) {
				returnJson = "{\"Records\":\"error!\",\"message\":\"请传递合适的值!\"}";
			} else {
				returnJson = articleCEIResultPerformanceService.getOriginalArticleDayDataJson(departmentIds, pubDay);
			}
		} else if (type.equals("article")) {
			// 原创稿文章详情数据
			String zbGuids = RequestUtil.getParameter(request, "zbGuids", "");
			if (StringHelper.isEmpty(zbGuids)) {
				returnJson = "{\"Records\":\"error!\",\"message\":\"请传递合适的值!\"}";
			} else {
				returnJson = articleCEIResultPerformanceService.getOriginalArticleDetailDataJsonByZbguid(zbGuids);
			}
		} else {
			returnJson = "{\"Records\":\"error!\",\"message\":\"请传递合适的参数!\"}";
		}
		return returnJson;
	}

在web.xml中,写上这句话:

 <servlet>
  <servlet-name>casData</servlet-name>
  <servlet-class>com.trs.bas.controller.servlet.CasDataApiServlet</servlet-class>
  <load-on-startup>11</load-on-startup>
  <async-supported>true</async-supported>
 </servlet>
 <servlet-mapping>
  <servlet-name>casData</servlet-name>
  <url-pattern>/casData/*</url-pattern>
 </servlet-mapping>

 上述代码中运用了  ResponseUtil这个工具类,这是我公司自己封装的工具类。

它的作用就是:将给定的文本内容(字符串)返回给客户端.

	public static void json(HttpServletResponse response, String json)
			throws IOException {
		response(response, json, "utf-8", "text/html");
	}

        public static void response(HttpServletResponse response, String textPlain,
			String encoding, String contentType) throws IOException {
		//response.setBufferSize设置缓冲
	final int bufSize = NumberUtil.getMin(textPlain.length(), 1048576) * 3;
	try {
		response.setBufferSize(bufSize);
	} catch (Exception e) {
		LOG.error("setBufferSize:" + bufSize + " error", e);
	}
	if (contentType != null) {
	response.setContentType(contentType);
	} else {
		response.setContentType("text/plain");
	}
	if (encoding != null) {
		response.setCharacterEncoding(encoding);
	}

	// 不能设置setContentLength头, 否则在包含中文时浏览器可能收不全!
	esponse.getWriter().write(textPlain);
	response.flushBuffer();
	}

好了,这样架子就搭好了。接下来就是在函数中构造json串。此处省略一万字。。。

 

 

后记:等我做完了之后,发现月和日可以使用一个接口。 这样就可以少提供一个接口,减少前期的接口开发和后期的接口维护工作。还是应了那句老话: 多想少做。

  

 

posted @ 2017-03-06 10:01  纯丿乱  阅读(481)  评论(0编辑  收藏  举报