shgsdhgsdsdl-Java接口开发
来源:互联网 发布:淘宝关联店铺打单 编辑:程序博客网 时间:2024/06/01 10:41
Java后台接口开发初步实战
发表于2017/3/23 19:55:25 3415人阅读
分类: Java
上图是查询列表的接口,get方式
上图是用户注册的接口,同样是get,post方式也很简单
开发工具:IntelliJ IDEA 2016.3.5
ORM框架:MyBatis
数据库:MySql
服务器:tomcat7.0
公司使用的的orm框架是Hibernate,使用起来感觉比mybatis好用多了,毕竟经过了公司这么多项目的考验,总比自己用mybatis写的项目可靠,但以下分享的还是mybatis的代码
注册接口方法:http://192.168.1.116:8080/register?username=111&password=222
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
具体的注册方法,获取session基本和Hibernate差不多
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
这个Mapper需要在配置文件中指定
- 1
- 2
- 3
- 4
- 5
- 6
这是对应的LoginMapper.xml
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
或许我可以写几个简单的接口供好旅App调用,但貌似需要购买一个空间之类的,这就感觉有点麻烦了,以后慢慢考虑吧,毕竟刚接触这方面,需要慢慢成长
====================================
环境搭建(一)
=====================================
web接口开发(二)
java web开发(二) 接口开发
java web开发(一) 环境搭建讲解了如何搭建基础项目,如果你还没了解,可以先去看看!今天我们就来看看接口的开发,打算使用比较古老的或者说比较原始方法实现的接口。
一.数据库设计。
我打算做一个简单的学生信息管理系统,数据库名为students_manage,并且先设计一张学生表,表名为student。
1.打开Sqlyong工具,如果还没创建连接,可以点击新建,输入名称,点击确定即可,
2.然后在保存的连接中选择,刚刚新建的连接,只需要在密码输入框中输入,安装数据库时的设置的密码,点击连接,其他的默认即可,
如果都ok的话,那么将会出现如下界面,就代表连接成功了!
3.连接成功后,首先创建数据库,在左边的空白区域,鼠标右键,创建数据库,输入数据库名称students_manage,其他的默认,
点击创建即可,然后在左边的数据库列表中会多一个students_manage的数据库,
4.创建数据库成功后,我们便可以创建数据库表,选中students_manage的数据库中的Tables文件夹,右边,创建表,输入表的字段,类型,设置主键,是否可为空等,
点击创建表按钮,便会看到在Tables文件夹中,多一个student表,
5.双击student表,便会打开该表,我们需要给该表中,先初始化一些数据,点击表数据,然后插入数据,点击保存。
此时表中已有2条记录。
数据库的简单设计就差不多了,接下来,我们需要开发接口!
二.接口项目开发。如果对这一部分有疑问或者不清楚的,欢迎查看java web开发(四) 接口开发补坑1和 java web开发(五) 接口开发补坑2!
接口返回的数据格式是JSON,如果你对JSON还不熟悉,可以先看看文章 JSON 使用讲解和JSON 解析。
1.新建项目。这个就不多说了!这一块要是还不了解,请看这篇文章, java web开发(一) 环境搭建。
2.设计Json数据。
2.1.接口返回的Json数据格式如下:
(1).返回对象,
{"code":" ","msg":" ","time":1464937933230,"object":{}}(2).返回数组,
{"code":" ","msg":" ","time":1464937933230,"items":[{},{}]}目前就设计返回为以上两种格式。如果你有分页的话,也可以加上。下面,就展示一下,代码以及说明。
(1).建立AbstractJsonObject(Json数据的基类),具体实现如下:
public class AbstractJsonObject { //codeprivate String code;//msgprivate String msg;private Long time = new Date().getTime();public String getCode() {return code;}public void setCode(String code) {this.code = code;}/** * @return the time */public Long getTime() {return time;}/** * @param time * the time to set */public void setTime(Long time) {this.time = time;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public void setContent(String code, String msg) {this.code = code;this.msg = msg;}public void setStatusObject(StatusObject statusObject) {this.code = statusObject.getCode();this.msg = statusObject.getMsg();}}其中,StatusObject是一个状态对象,封装了状态码(code)和状态信息(msg),具体实现如下:
/** * 状态对象 */public class StatusObject {// 状态码private String code;// 状态信息private String msg;public StatusObject(String code, String msg) {super();this.code = code;this.msg = msg;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}}(2).建立Json对象类SingleObject,代码:
public class SingleObject extends AbstractJsonObject {private Object object;public Object getObject() {return object;}public void setObject(Object object) {this.object = object;}}(3).建立Json数组类ListObject,代码:
public class ListObject extends AbstractJsonObject {// 列表对象private List<?> items;public List<?> getItems() {return items;}public void setItems(List<?> items) {this.items = items;}}经过上面几步,我们所需要的json数据格式已经创建好了,接下来就需要解析json数据了,我这儿选择的jackjson,JackJson 库下载。下载完jackson库后,将三个包导入到项目的lib目中,截图所示:
(4).JackJsonUtils生成json数据和解析json数据,代码:
public class JackJsonUtils {static ObjectMapper objectMapper;/** * 解析json * * @param content * @param valueType * @return */public static <T> T fromJson(String content, Class<T> valueType) {if (objectMapper == null) {objectMapper = new ObjectMapper();}try {return objectMapper.readValue(content, valueType);} catch (Exception e) {e.printStackTrace();}return null;}/** * 生成json * * @param object * @return */public static String toJson(Object object) {if (objectMapper == null) {objectMapper = new ObjectMapper();}try {return objectMapper.writeValueAsString(object);} catch (Exception e) {e.printStackTrace();}return null;}}至此,json数据设计就ok了!是不是没有想象的那么难?也许,就真的这么简单!接下来,就是接口的开发了。
3.接口开发。
本篇文章开发接口使用的是古老的servlet实现的,关于servlet,请自行查找资料,这里就不多说了(其实我也就一知半解)
3.1.创建一个类继承自HttpServlet,例如StudentInq,鼠标右键,新建->选择Servlet,截图所示输入Servlet名称,点击Finish按钮,就ok了!
此时你会发现包下多了一个StudentInq类,具体代码:
public class StudentInq extends HttpServlet {private static final long serialVersionUID = 1L;/** * @see HttpServlet#HttpServlet() */public StudentsInq() {super();// TODO Auto-generated constructor stub}/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// TODO Auto-generated method stub}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}实现HttpServlet的doGet()和doPost方法,此处为了简单就只实现doGet()。
PS: 如果你比较细心的话,会发现在web.xml文件中多了几行代码,具体如下截图:(web.xml 是网络程序中的一个很重要的配置文件,更具体的、详细的请查询相关文档)
,
可以看到我们刚才新建servlet,在这个xml文件中显示了。后面我们在调用接口的时候便会用到这个配置清单。
3.2. 接口实现。
我们就简单的实现一个学生查询接口!调用查询接口,返回数据库中所有的学生信息。
(1).新建一个接口StudentService,代码:
public interface StudentService {public List<Students> getAllStudents();}(2). 实现该接口,StudentServiceImpl代码:
public class StudentServiceImpl implements StudentService{@Overridepublic List<Students> getAllStudents() {// TODO Auto-generated method stubreturn StudentBusiness.getAllStudents();}}
其中,StudentBusiness提供了从数据库获取学生信息的方法。有关数据库操作下面会讲到。接着,我们实现Servlet的doGet(),具体代码:
List<Students> list = new StudentServiceImpl().getAllStudents();ListObject listObject=new ListObject();listObject.setItems(list);listObject.setStatusObject(StatusHouse.COMMON_STATUS_OK);String responseText = JackJsonUtils.toJson(listObject);ResponseUtils.renderJson(response, responseText);
其中,ResponseUtils是将返回的json数据写入到response中。
至此,接口返回数据已经成功了!目前还没有连接数据库,那么接下来,就是有关数据库的操作。
4. 数据库操作。
文章开头,我们已经创建好了数据库以及表,并且也添加了几条测试数据。数据有了,我们需要在项目中获取到,那么该怎么操作呢?
(1). 数据库连接。
我们连接mysql数据库,需要导入mysql-connector.jar,jar包下载链接下载好jar后,导入到lib目录中,。
(2). 建立DBHelper连接数据库以及关闭连接:
public class DBHelper { public static final String url = "jdbc:mysql://localhost:3306/students_manage"; public static final String name = "com.mysql.jdbc.Driver"; public static final String user = "****"; public static final String password = "******"; public Connection conn = null; public PreparedStatement pst = null; public DBHelper(String sql) { try { Class.forName(name);// conn = DriverManager.getConnection(url, user, password);// pst = conn.prepareStatement(sql);// } catch (Exception e) { e.printStackTrace(); } } public void close() { try { this.conn.close(); this.pst.close(); } catch (SQLException e) { e.printStackTrace(); } } }这个代码很简单了,不需要多说!
这一步,我们是连接数据库,连接成功后,就可以使用表中的数据了!
三. 运行。
经过上面几步,我们就大致完成了一个简单使用Servlet的接口开发,接下来就到了激动人心的时刻了,运行!
PS: 在运行前,可以在WebContent中添加一个index.jsp,index.jsp代码:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><h1>hello world!</h1><h2>This is my test page!</h2><h3>Welcome to my page!</h3></body></html>
(1).在项目上,右键->Run As->Run to Server。
如果一切都正常的话,(如果你创建了index.jsp,你会看到一个jsp页面;如果没有创建index.jsp,可能会显示一个404界面;当然没有创建index.jsp不会影响咱们接口的调试)
(2).我们在浏览器中输入‘http://localhost:8080/mServer/StudentInq’,如果一切都正常的话,会显示:
或者在浏览器中输入本机的ip地址,例如’http://192.168.1.133:8080/mServer/StudentInq‘,
看到这个界面,顿时泪流满面!!
四. 总结。
这么长的篇幅终于实现了简单接口的开发,不容易啊!太感动了!我们总结一下实现接口开发步骤:
(1). 数据库表设计;
(2).json数据设计;
(3).接口实现。
总结后,是不是感觉很简单呢!从此以后,只要看到接口数据不如意的,你都可以随便来改!!(实际上接口开发要牵扯好多东西,如果你要了解或者熟悉更多有关接口开发,那么就需要结合Web框架,例如SSH,Springmvc等等,本篇文章只是很基础的入门开发)至此,通过这篇文章,相信你对接口不再生疏了!下篇文章将介绍,后台接口服务和前端客户端结合,详情请看,java web开发(三) 接口使用。
最后补上,例子下载地址。
PS: json格式化工具
推荐文章:SpringMVC 开发接口
博文中经常有小伙伴留言,有关接口项目的问题,最近就推出几篇补坑的文章,打算这几篇文章详解项目中的代码以及业务流程,java web开发(四) 补坑1和 java web开发(五) 接口开发补坑2!欢迎大家查看!
============================
再续(三)
前面两篇文章讲解了,接口服务的搭建以及接口的开发,如果你还未了解,可以先看看文章,java web开发(一) 环境搭建和 java web开发(二) 接口开发。本篇文章,结合后台接口服务和客户端。客户端从接口获取数据,然后展示。(客户端使用Android)。
一.接口服务创建。可以参考上篇文章,这儿就不啰嗦了!
二. 实现Android项目。
1.创建Android项目。相信大家都会吧!(就不多说了)
2.实现Json数据解析。上篇接口开发文章中提到,返回的Json数据有2种,一种是对象,另一种是数组。那么我们就需要实现两种格式的解析对象。
首先,需要创建一个基类,内部有三个字段,code、msg、time。具体实现如下:
public class Response implements Serializable {/** * */private static final long serialVersionUID = 1L;private String code;// private String msg;private Long time = new Date().getTime();public String getCode() {return code;}public void setCode(String code) {this.code = code;}/** * @return the time */public Long getTime() {return time;}/** * @param time * the time to set */public void setTime(Long time) {this.time = time;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public void setContent(String code, String msg) {this.code = code;this.msg = msg;}}
该类是所有json解析类的基类,封装了服务器返回的一些信息。
2.1 对象。
public class EntityResponse<T> extends Response {private static final long serialVersionUID = 3750508105973880680L;private T object;public T getObject() {return object;}public void setObject(T object) {this.object = object;}}
该类继承自Response,用于返回json数据是单独对象的情况。
2.2 数组。
public class ListResponse<T> extends Response {private static final long serialVersionUID = 2857885317968129959L;private List<T> items;public List<T> getItems() {return items;}public void setItems(List<T> items) {this.items = items;}}
该类继承自Response,用于返回json数据是数组的情况。
2.3 Json解析。解析Json使用的是Gson。
private static <T> T parseByGson(String json, TypeToken<T> typeToken) {Gson gson = new Gson();T result = gson.fromJson(json, typeToken.getType());String code = ((com.studentmaneagemobile.mobile.Response) result).getCode();String msg = ((com.studentmaneagemobile.mobile.Response) result).getMsg();//需要判断返回code是否是okif (code != null && code.equalsIgnoreCase("ok")) {return result;}return null;}解析json,当code为‘ok’的时候,才认为返回json数据成功,此时才去解析json数据。传入返回json字符串和解析类型,例如
TypeToken<ListResponse<Students>> token = new TypeToken<ListResponse<Students>>() {};
2.4 具体代码详解代码下载!
2.5 运行。
首先,启动接口服务,启动成功后,在浏览器中输入接口地址,例如出现如下截图表示接口服务启动成功,
接着,运行客户端代码,点击‘inq’按钮,效果图如下所示,
三. 总结。
如果你做过Android或者Ios或者其他客户端开发,那么总是会需要后台服务提供接口。要实现这样的功能,简单的说可以分为2部分:
1.接口服务开发。详情请看java web开发(一) 环境搭建和 java web开发(二) 接口开发。
2.客户端开发。客户端需要,UI设计、网络、图片、数据库或者其他框架等等。
PS: 这两部分,在前期设计的时候,需要好的架构师好好的设计一下!否则,在后期开发时,会遇到很大的问题!
总结起来好像很简单,但是只有开发过的人,才知道其中的滋味!!“Good good study day day up”!
PS: 接口服务器代码, 接口服务demo下载地址。
客户端代码,客户端demo下载地址。
json格式化工具
推荐文章:SpringMVC 开发接口
前面两篇文章讲解了,接口服务的搭建以及接口的开发,如果你还未了解,可以先看看文章,java web开发(一) 环境搭建和 java web开发(二) 接口开发。本篇文章,结合后台接口服务和客户端。客户端从接口获取数据,然后展示。(客户端使用Android)。
一.接口服务创建。可以参考上篇文章,这儿就不啰嗦了!
二. 实现Android项目。
1.创建Android项目。相信大家都会吧!(就不多说了)
2.实现Json数据解析。上篇接口开发文章中提到,返回的Json数据有2种,一种是对象,另一种是数组。那么我们就需要实现两种格式的解析对象。
首先,需要创建一个基类,内部有三个字段,code、msg、time。具体实现如下:
public class Response implements Serializable {/** * */private static final long serialVersionUID = 1L;private String code;// private String msg;private Long time = new Date().getTime();public String getCode() {return code;}public void setCode(String code) {this.code = code;}/** * @return the time */public Long getTime() {return time;}/** * @param time * the time to set */public void setTime(Long time) {this.time = time;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public void setContent(String code, String msg) {this.code = code;this.msg = msg;}}
该类是所有json解析类的基类,封装了服务器返回的一些信息。
2.1 对象。
public class EntityResponse<T> extends Response {private static final long serialVersionUID = 3750508105973880680L;private T object;public T getObject() {return object;}public void setObject(T object) {this.object = object;}}
该类继承自Response,用于返回json数据是单独对象的情况。
2.2 数组。
public class ListResponse<T> extends Response {private static final long serialVersionUID = 2857885317968129959L;private List<T> items;public List<T> getItems() {return items;}public void setItems(List<T> items) {this.items = items;}}
该类继承自Response,用于返回json数据是数组的情况。
2.3 Json解析。解析Json使用的是Gson。
private static <T> T parseByGson(String json, TypeToken<T> typeToken) {Gson gson = new Gson();T result = gson.fromJson(json, typeToken.getType());String code = ((com.studentmaneagemobile.mobile.Response) result).getCode();String msg = ((com.studentmaneagemobile.mobile.Response) result).getMsg();//需要判断返回code是否是okif (code != null && code.equalsIgnoreCase("ok")) {return result;}return null;}解析json,当code为‘ok’的时候,才认为返回json数据成功,此时才去解析json数据。传入返回json字符串和解析类型,例如
TypeToken<ListResponse<Students>> token = new TypeToken<ListResponse<Students>>() {};
2.4 具体代码详解代码下载!
2.5 运行。
首先,启动接口服务,启动成功后,在浏览器中输入接口地址,例如出现如下截图表示接口服务启动成功,
接着,运行客户端代码,点击‘inq’按钮,效果图如下所示,
三. 总结。
如果你做过Android或者Ios或者其他客户端开发,那么总是会需要后台服务提供接口。要实现这样的功能,简单的说可以分为2部分:
1.接口服务开发。详情请看java web开发(一) 环境搭建和 java web开发(二) 接口开发。
2.客户端开发。客户端需要,UI设计、网络、图片、数据库或者其他框架等等。
PS: 这两部分,在前期设计的时候,需要好的架构师好好的设计一下!否则,在后期开发时,会遇到很大的问题!
总结起来好像很简单,但是只有开发过的人,才知道其中的滋味!!“Good good study day day up”!
PS: 接口服务器代码, 接口服务demo下载地址。
客户端代码,客户端demo下载地址。
json格式化工具
推荐文章:SpringMVC 开发接口
java web开发(五) 接口开发补坑2
这里主要是接上篇java web开发(四) 接口开发补坑1文章的。如果你还未了解接口开发方面的文章,请先看这篇文章, java web开发(二) 接口开发!今天这篇文章继续来细说,demo项目中的代码!
一、cn.xinxing.json 这个包中是处理有关json操作的。博文中留言有关响应状态码问题的小伙伴们,请仔细看这部分!
1.1 .cn.xinxing.json.core 这个包中定义了响应对象。下面具体看看这几个类。
1.1.1 AbstractJsonObject 这个类是所有响应对象的基类,定义了响应状态码、响应状态描述以及时间戳!
package cn.xinxing.json.core;import java.util.Date;import cn.xinxing.json.status.StatusObject;/** * 响应基类 */public class AbstractJsonObject {private String code;//响应状态码// private String msg;//响应状态描述private Long time = new Date().getTime();//时间戳public String getCode() {return code;}public void setCode(String code) {this.code = code;}/** * @return the time */public Long getTime() {return time;}/** * @param time * the time to set */public void setTime(Long time) {this.time = time;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public void setContent(String code, String msg) {this.code = code;this.msg = msg;}public void setStatusObject(StatusObject statusObject) {this.code = statusObject.getCode();this.msg = statusObject.getMsg();}}其中 code 是响应状态码,msg是响应状态描述,time 是时间戳。code之前也一直提到过,这里再次强调,code的值是项目中接口的运行状态!例如当接口运行运行成功,会设置code为‘ok’。具体code值是多少,这个要接口自己定义一个规范,当调用者拿到这个code时,就知道如何处理了!下面会给出这个项目中定义的code!
1.1.2 SingleObject ,这个对象中定了一个对象。主要是用来在返回单个对象时使用!
package cn.xinxing.json.core;/** *单个对象 */public class SingleObject extends AbstractJsonObject {private Object object;//单个对象public Object getObject() {return object;}public void setObject(Object object) {this.object = object;}}当响应的内容是一个对象时,就定义这个SingleObject类,将对象设置给SingleObject类,然后返回SingleObject即可!
1.1.3 ListObject,这个对象中定了一个列表对象。是用来返回列表对象!
package cn.xinxing.json.core;import java.util.List;/** * 列表对象 */public class ListObject extends AbstractJsonObject {private List<?> items;// 列表对象public List<?> getItems() {return items;}public void setItems(List<?> items) {this.items = items;}}当响应的内容是一个列表时,我们就可以使用这个ListObject,将列表放置到items属性中,然后返回ListObject就可以了!
这里我只给出了以上这两种返回结果!当然还有其他的返回结果,例如分页形式的!这些规则都需要在项目开发时制定好,在开发时,才会顺利便捷!
1.2 cn.xinxing.json.responseUtils 这个包中是响应处理,有一个类ResponseUtils,看具体实现,
package cn.xinxing.json.responseUtils;import java.io.IOException;import javax.servlet.http.HttpServletResponse;/** * 响应处理 */public class ResponseUtils {/** * 返回json 串 * * @param response * @param text */public static void renderJson(HttpServletResponse response, String text) {// System.out.print(text);render(response, "text/plain;charset=UTF-8", text);}/** * 发送内容。使用UTF-8编码。 * * @param response * @param contentType * @param text */public static void render(HttpServletResponse response, String contentType, String text) {response.setContentType(contentType);response.setCharacterEncoding("utf-8");response.setHeader("Pragma", "No-cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);try {response.getWriter().write(text);} catch (IOException e) {}}}将结果串设置到response中,返回给调用者!
1.3 cn.xinxing.json.status 这个包定义响应状态有关的。
1.3.1 StatusCode ,定义响应状态码
package cn.xinxing.json.status;/** * * 返回code */public class StatusCode {public static String CODE_SUCCESS = "ok";//访问成功public static String CODE_ERROR = "0001"; //访问错误public static String CODE_ERROR_PARAMETER = "0002";//参数错误public static String CODE_ERROR_PROGRAM = "0003";//程序异常public static String CODE_ERROR_NO_LOGIN_OR_TIMEOUT = "0004";//未登录或登录超时,请重新登录public static String CODE_ERROR_EXIST_OPERATION = "0005";//已操作}这个类中定义了接口中使用到的所有响应状态码。具体的定义规则,都是开发者定义的!没有什么标准规范!
1.3.2 StatusHouse,将code和msg组装到一起,在使用时更加方便!
package cn.xinxing.json.status;/** * 状态封装类 * 将code和msg组合到一起,方便使用 */public class StatusHouse {public static StatusObject COMMON_STATUS_OK = new StatusObject(StatusCode.CODE_SUCCESS, "访问成功");public static StatusObject COMMON_STATUS_ERROR = new StatusObject(StatusCode.CODE_ERROR, "访问错误,错误码:(" + StatusCode.CODE_ERROR + ")");public static StatusObject COMMON_STATUS_NO_LOGIN_OR_TIMEOUT = new StatusObject(StatusCode.CODE_ERROR_NO_LOGIN_OR_TIMEOUT, "未登录或登录超时,请重新登录,错误码:(" + StatusCode.CODE_ERROR_NO_LOGIN_OR_TIMEOUT + ")");public static StatusObject COMMON_STATUS_ERROR_PROGRAM = new StatusObject(StatusCode.CODE_ERROR_PROGRAM, "程序异常,错误码:(" + StatusCode.CODE_ERROR_PROGRAM + ")");public static StatusObject COMMON_STATUS_ERROR_PARAMETER = new StatusObject(StatusCode.CODE_ERROR_PARAMETER, "参数错误,错误码:(" + StatusCode.CODE_ERROR_PARAMETER + ")");public static StatusObject COMMON_STATUS_EXIST_OPERATION = new StatusObject(StatusCode.CODE_ERROR_EXIST_OPERATION, "已操作,错误码:(" + StatusCode.CODE_ERROR_EXIST_OPERATION + ")");}1.3.3 StatusObject 定义了拥有code和msg属性的对象,在上面的StatusHouse类中使用到!
package cn.xinxing.json.status;/** * 状态对象 */public class StatusObject {// 状态码private String code;// 状态信息private String msg;public StatusObject(String code, String msg) {super();this.code = code;this.msg = msg;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}}1.4 cn.xinxing.json.utils 这个包是有关json解析的,只有一个JackJsonUtils 类。
1.4.1 JackJsonUtils ,因为项目中使用的是jackjson来处理json。
package cn.xinxing.json.utils;import com.fasterxml.jackson.databind.ObjectMapper;/** * jackjson */public class JackJsonUtils {static ObjectMapper objectMapper;/** * 解析json * * @param content * @param valueType * @return */public static <T> T fromJson(String content, Class<T> valueType) {if (objectMapper == null) {objectMapper = new ObjectMapper();}try {return objectMapper.readValue(content, valueType);} catch (Exception e) {e.printStackTrace();}return null;}/** * 生成json * * @param object * @return */public static String toJson(Object object) {if (objectMapper == null) {objectMapper = new ObjectMapper();}try {return objectMapper.writeValueAsString(object);} catch (Exception e) {e.printStackTrace();}return null;}}这个类有两个方法,fromJson()和toJson(),他们分别是解析json和生成json字符串的!
好了,有关响应以及json这么多。有疑问的,请多看几遍!
二、cn.xinxing.model 这个包定义实体类。只有一个Students类,类中定义了几个属性,以及实现了get()和set()方法。此处就不展开了!
三、 cn.xinxing.service.student 定义一个服务层,用于提供数据以及封装下层实现。
3.1 StudentService 这是接口,定义了获取学生数据相关的方法。
package cn.xinxing.service.student;import java.util.List;import cn.xinxing.model.Students;/** * 获取学生数据接口 */public interface StudentService {public List<Students> getAllStudents();//获取所有的学生数据}
3.2 cn.xinxing.service.student.impl 这个包实现了上文中定义的接口,只有一个实现类StudentServiceImpl ,看具体实现,
package cn.xinxing.service.student.impl;import java.util.List;import cn.xinxing.business.StudentBusiness;import cn.xinxing.model.Students;import cn.xinxing.service.student.StudentService;/** * 接口实现 */public class StudentServiceImpl implements StudentService{@Overridepublic List<Students> getAllStudents() {// TODO Auto-generated method stubreturn StudentBusiness.getAllStudents(); //调用具体的获取学生数据方法}}getAllStudents()方法只是调用了其他地方的获取数据的方法。这个地方就是这么简单!
至此,项目中的全部代码都已经展示完了!相信仔细阅读这两篇文章后,大家应该对java web 接口开发有了更深的了解!如果,还有其他疑问,欢迎指出!
最后补上,例子下载地址。
PS: 这里还想再多说几句!java接口开发,这个在正式项目中,需要涉及很多方面的知识,例如,数据库使用框架来维护,整个服务部署至云服务上等等!想要掌握这些东西,需要花费很多的时间和精力!我自己是一直多Android应用,接口开发是自己的自学的。java 接口开发这几篇博文呢,都只是初级的入门级的,在正式项目中呢,肯定不能这样做。目前的还有需要学习很多东西,希望和大家一块学习!
前面两篇文章讲解了,接口服务的搭建以及接口的开发,如果你还未了解,可以先看看文章,java web开发(一) 环境搭建和 java web开发(二) 接口开发。本篇文章,结合后台接口服务和客户端。客户端从接口获取数据,然后展示。(客户端使用Android)。
一.接口服务创建。可以参考上篇文章,这儿就不啰嗦了!
二. 实现Android项目。
1.创建Android项目。相信大家都会吧!(就不多说了)
2.实现Json数据解析。上篇接口开发文章中提到,返回的Json数据有2种,一种是对象,另一种是数组。那么我们就需要实现两种格式的解析对象。
首先,需要创建一个基类,内部有三个字段,code、msg、time。具体实现如下:
public class Response implements Serializable {/** * */private static final long serialVersionUID = 1L;private String code;// private String msg;private Long time = new Date().getTime();public String getCode() {return code;}public void setCode(String code) {this.code = code;}/** * @return the time */public Long getTime() {return time;}/** * @param time * the time to set */public void setTime(Long time) {this.time = time;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public void setContent(String code, String msg) {this.code = code;this.msg = msg;}}
该类是所有json解析类的基类,封装了服务器返回的一些信息。
2.1 对象。
public class EntityResponse<T> extends Response {private static final long serialVersionUID = 3750508105973880680L;private T object;public T getObject() {return object;}public void setObject(T object) {this.object = object;}}
该类继承自Response,用于返回json数据是单独对象的情况。
2.2 数组。
public class ListResponse<T> extends Response {private static final long serialVersionUID = 2857885317968129959L;private List<T> items;public List<T> getItems() {return items;}public void setItems(List<T> items) {this.items = items;}}
该类继承自Response,用于返回json数据是数组的情况。
2.3 Json解析。解析Json使用的是Gson。
private static <T> T parseByGson(String json, TypeToken<T> typeToken) {Gson gson = new Gson();T result = gson.fromJson(json, typeToken.getType());String code = ((com.studentmaneagemobile.mobile.Response) result).getCode();String msg = ((com.studentmaneagemobile.mobile.Response) result).getMsg();//需要判断返回code是否是okif (code != null && code.equalsIgnoreCase("ok")) {return result;}return null;}解析json,当code为‘ok’的时候,才认为返回json数据成功,此时才去解析json数据。传入返回json字符串和解析类型,例如
TypeToken<ListResponse<Students>> token = new TypeToken<ListResponse<Students>>() {};
2.4 具体代码详解代码下载!
2.5 运行。
首先,启动接口服务,启动成功后,在浏览器中输入接口地址,例如出现如下截图表示接口服务启动成功,
接着,运行客户端代码,点击‘inq’按钮,效果图如下所示,
三. 总结。
如果你做过Android或者Ios或者其他客户端开发,那么总是会需要后台服务提供接口。要实现这样的功能,简单的说可以分为2部分:
1.接口服务开发。详情请看java web开发(一) 环境搭建和 java web开发(二) 接口开发。
2.客户端开发。客户端需要,UI设计、网络、图片、数据库或者其他框架等等。
PS: 这两部分,在前期设计的时候,需要好的架构师好好的设计一下!否则,在后期开发时,会遇到很大的问题!
总结起来好像很简单,但是只有开发过的人,才知道其中的滋味!!“Good good study day day up”!
PS: 接口服务器代码, 接口服务demo下载地址。
客户端代码,客户端demo下载地址。
json格式化工具
推荐文章:SpringMVC 开发接口
- shgsdhgsdsdl-Java接口开发
- java webservice接口开发
- 短信JAVA开发接口
- java 短信接口开发
- 记录java接口开发
- java支付接口开发
- 工商银行接口开发-java
- Axis 开发 java WebService 接口
- java native 接口开发流程
- java短信发送接口开发
- java 开发第三方微信接口
- java 支付宝 接口开发
- Java开发WebService接口记录
- JAVA WEB接口开发简述
- Java开发练习4,接口
- java web开发(二) 接口开发
- java web开发(二) 接口开发
- java web开发(二) 接口开发
- Conent7.0安装lanp全过程
- C++ Builder中 TMemIniFile读取效率比TIniFile快很多
- ubuntu常用命令
- Yii2.0数据库操作增删改查详解 [ 2.0 版本 ]
- spring boot would dispatch back to the current handler URL [/hello] again. Check your ViewResolver s
- shgsdhgsdsdl-Java接口开发
- Android手机无Root导出应用数据库
- 从零开始学_JavaScript_系列(58)——Thunk函数
- eclipse Debug界面应用
- 什么叫做敏捷开发
- nodejs入门——创建项目
- 《HTML5权威指南》之使用盒模型
- LINUX下的路由追踪traceroute
- OSG 场景图(Scene Graph) 类图