一、编写接收JSON字符串的jsp页面
<%@ page pageEncoding="GBK" %>
<%@ page import="com.icsc.dpms.de.structs.*"%>
<%
dejcWebInfoOut infoOut = (dejcWebInfoOut)request.getAttribute("infoOut") == null? new dejcWebInfoOut():(dejcWebInfoOut)request.getAttribute("infoOut");
%>
<% String json = infoOut.getParameter("json"); %>
<%= json %>
将上述代码保存在一个jsp文件中,放入各自自己的子系统的jsp下,比如此处将jsp名称命名为xxjjAjax.jsp
二、在ERP中加入GSON字符串处理的jar包
为什么ERP中已经有JSON的jar包,这里还需要jar包,因为ERP中的JSON的jar包,在反序列的时候遇到多层级的json字符串结构的时候,反序列化的结果不友好,需要开发人员二次转换,很麻烦,而且在移动端请求过来的数据绝大部分都是多层级的,所以加入新的JSON处理jar包很是必要。如果已经存在gson的低版本的jar包,则将之替换,不影响已调用旧版本的程序。
三、接口返回JSON数据格式统一封装类
package com.icsc.wf.entity;
import java.util.HashMap;
import java.util.Map;
import com.google.gson.Gson;
/**
* @desc 接口数据实体类
* @author WangWeiWei
* @date 2018年5月16日 上午9:05:38
*/
public class wfjcMobileAjaxEntity {
public final static int STATUS_CODE_SUCCESS = 200;
public final static int STATUS_CODE_FAILURE = 300;
public final static int STATUS_CODE_TIMEOUT = 301;
public final static int STATUS_CODE_FORBIDDEN = 403;
/**
* 状态码
*/
private Integer statusCode;
/**
* 备注
*/
private String message;
/**
* 返回数据
*/
private Object data;
public Integer getStatusCode() {
return statusCode;
}
public void setStatusCode(Integer statusCode) {
this.statusCode = statusCode;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
@Override
public String toString() {
Map<String, Object> ajax = new HashMap<String, Object>();
ajax.put("statusCode", statusCode);
ajax.put("message", message);
ajax.put("data", data);
return new Gson().toJson(ajax);
}
}
复制此处代码到自己环境里,强烈建议所有的接口返回数据类型按照这个来,可以大量减少移动端的开发任务量
四、接口代码编写示例
public void getVerifylist() {
wfjcMobileAjaxEntity mobileAjax = new wfjcMobileAjaxEntity();
try {
/* 数据获取 */
/* 尽可能做更多的请求参数的验证,方便移动端开发人员与用户在遇到请求错误看到尽可能详尽的错误信息 */
//.............业务逻辑获取数据
mobileAjax.setStatusCode(wfjcMobileAjaxEntity.STATUS_CODE_SUCCESS);
mobileAjax.setMessage("获取审核列表成功");
mobileAjax.setData(data);
} catch (Exception e) {
e.printStackTrace();
mobileAjax.setStatusCode(wfjcMobileAjaxEntity.STATUS_CODE_FAILURE);
mobileAjax.setMessage("程序发生错误,获取数据失败!");
}
infoOut.setParameter("json", mobileAjax.toString());
}
注意1:此处setParameter的key值要与接收json字符串中的key对应
注意2:在开发手机接口时候,尽可能做更多的请求参数的验证,方便移动端开发人员与用户在遇到请求错误看到尽可能详尽的错误信息。方便他人即是方便自己!
五、配置xxStructs.xml配置文件
<page pageID="verifyMobile" path="wfjjAjax.jsp">
<controller>com.icsc.wf.mobile.wfjcVerifyMobileController</controller>
<action flag="getVerifylist" method="getVerifylist" forward="wfjjAjax.jsp"></action>
<converter></converter>
</page>
这里path或者action中的forward填写接收json字符串的jsp名称
六、将接口请求的地址添加到登录拦截之外
需要在数据库中的DB.AR_ALLOWED_RULES表中将接口地址插入进去,插入的sql命令如下:
INSERT INTO AR_ALLOWED_RULES (ID, PAGE_ID, ACTION) VALUES ('', '', '');
ID填入UUID,PAGE_ID和ACTION就是structs配置文件中的pageId和action
到此一个接口已经开发完毕,但是还需要编写接口文档,要不然移动端开发人员会很麻烦
接口文档建议使用有道云笔记的Markdown编辑器
使用有道云Markdown的好处是,写出的接口文档很直观美观,移动端开发人员一看便知,且后续有接口文档的更新直接编辑保存即可然后通知移动端开发人员刷新浏览器页面即可看到,不用像以前的txt或者word等格式的文件在更改后频繁发给移动端开发人员。
作者:研究院-解决方案部-王玮玮
网友评论