这里主要是接上篇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();
- }
- }
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;
- }
- }
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;
- }
- }
这里我只给出了以上这两种返回结果!当然还有其他的返回结果,例如分页形式的!这些规则都需要在项目开发时制定好,在开发时,才会顺利便捷!
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) {
- }
- }
- }
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 + ")");
- }
- 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.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;
- }
- }
好了,有关响应以及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{
- @Override
- public List<Students> getAllStudents() {
- // TODO Auto-generated method stub
- return StudentBusiness.getAllStudents(); //调用具体的获取学生数据方法
- }
- }
至此,项目中的全部代码都已经展示完了!相信仔细阅读这两篇文章后,大家应该对java web 接口开发有了更深的了解!如果,还有其他疑问,欢迎指出!
最后补上,例子下载地址。
PS: 这里还想再多说几句!java接口开发,这个在正式项目中,需要涉及很多方面的知识,例如,数据库使用框架来维护,整个服务部署至云服务上等等!想要掌握这些东西,需要花费很多的时间和精力!我自己是一直做Android应用,接口开发是自己的自学的。java 接口开发这几篇博文呢,都只是初级的入门级的,在正式项目中呢,肯定不能这样做。目前的还有需要学习很多东西,希望和大家一块学习!