java web开发(五) 接口开发补坑2

 这里主要是接上篇java web开发(四) 接口开发补坑1文章的。如果你还未了解接口开发方面的文章,请先看这篇文章, java web开发(二) 接口开发!今天这篇文章继续来细说,demo项目中的代码!

一、cn.xinxing.json 这个包中是处理有关json操作的。博文中留言有关响应状态码问题的小伙伴们,请仔细看这部分!

1.1 .cn.xinxing.json.core 这个包中定义了响应对象。下面具体看看这几个类。

1.1.1 AbstractJsonObject 这个类是所有响应对象的基类,定义了响应状态码、响应状态描述以及时间戳!

[java]  view plain  copy
  1. package cn.xinxing.json.core;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import cn.xinxing.json.status.StatusObject;  
  6.   
  7. /** 
  8.  * 响应基类 
  9.  */  
  10. public class AbstractJsonObject {  
  11.   
  12.     private String code;//响应状态码  
  13.     //   
  14.     private String msg;//响应状态描述  
  15.   
  16.     private Long time = new Date().getTime();//时间戳  
  17.   
  18.     public String getCode() {  
  19.         return code;  
  20.     }  
  21.   
  22.     public void setCode(String code) {  
  23.         this.code = code;  
  24.     }  
  25.   
  26.     /** 
  27.      * @return the time 
  28.      */  
  29.     public Long getTime() {  
  30.         return time;  
  31.     }  
  32.   
  33.     /** 
  34.      * @param time 
  35.      *            the time to set 
  36.      */  
  37.     public void setTime(Long time) {  
  38.         this.time = time;  
  39.     }  
  40.   
  41.     public String getMsg() {  
  42.         return msg;  
  43.     }  
  44.   
  45.     public void setMsg(String msg) {  
  46.         this.msg = msg;  
  47.     }  
  48.   
  49.     public void setContent(String code, String msg) {  
  50.         this.code = code;  
  51.         this.msg = msg;  
  52.     }  
  53.   
  54.     public void setStatusObject(StatusObject statusObject) {  
  55.         this.code = statusObject.getCode();  
  56.         this.msg = statusObject.getMsg();  
  57.     }  
  58. }  
其中 code 是响应状态码,msg是响应状态描述,time 是时间戳。code之前也一直提到过,这里再次强调,code的值是项目中接口的运行状态!例如当接口运行运行成功,会设置code为‘ok’。具体code值是多少,这个要接口自己定义一个规范,当调用者拿到这个code时,就知道如何处理了!下面会给出这个项目中定义的code!

1.1.2 SingleObject ,这个对象中定了一个对象。主要是用来在返回单个对象时使用!

[java]  view plain  copy
  1. package cn.xinxing.json.core;  
  2.   
  3. /** 
  4.  *单个对象 
  5.  */  
  6. public class SingleObject extends AbstractJsonObject {  
  7.   
  8.     private Object object;//单个对象  
  9.   
  10.     public Object getObject() {  
  11.         return object;  
  12.     }  
  13.   
  14.     public void setObject(Object object) {  
  15.         this.object = object;  
  16.     }  
  17.   
  18. }  
当响应的内容是一个对象时,就定义这个SingleObject类,将对象设置给SingleObject类,然后返回SingleObject即可!

1.1.3  ListObject,这个对象中定了一个列表对象。是用来返回列表对象!

[java]  view plain  copy
  1. package cn.xinxing.json.core;  
  2.   
  3. import java.util.List;  
  4.   
  5. /** 
  6.  * 列表对象 
  7.  */  
  8. public class ListObject extends AbstractJsonObject {  
  9.   
  10.       
  11.     private List<?> items;// 列表对象  
  12.   
  13.     public List<?> getItems() {  
  14.         return items;  
  15.     }  
  16.   
  17.     public void setItems(List<?> items) {  
  18.         this.items = items;  
  19.     }  
  20.   
  21. }  
当响应的内容是一个列表时,我们就可以使用这个ListObject,将列表放置到items属性中,然后返回ListObject就可以了!

这里我只给出了以上这两种返回结果!当然还有其他的返回结果,例如分页形式的!这些规则都需要在项目开发时制定好,在开发时,才会顺利便捷!

1.2  cn.xinxing.json.responseUtils 这个包中是响应处理,有一个类ResponseUtils,看具体实现,

[java]  view plain  copy
  1. package cn.xinxing.json.responseUtils;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.servlet.http.HttpServletResponse;  
  6.   
  7. /** 
  8.  * 响应处理 
  9.  */  
  10. public class ResponseUtils {  
  11.   
  12.     /** 
  13.      * 返回json 串 
  14.      *  
  15.      * @param response 
  16.      * @param text 
  17.      */  
  18.     public static void renderJson(HttpServletResponse response, String text) {  
  19.         // System.out.print(text);  
  20.         render(response, "text/plain;charset=UTF-8", text);  
  21.     }  
  22.   
  23.     /** 
  24.      * 发送内容。使用UTF-8编码。 
  25.      *  
  26.      * @param response 
  27.      * @param contentType 
  28.      * @param text 
  29.      */  
  30.     public static void render(HttpServletResponse response, String contentType, String text) {  
  31.         response.setContentType(contentType);  
  32.         response.setCharacterEncoding("utf-8");  
  33.         response.setHeader("Pragma""No-cache");  
  34.         response.setHeader("Cache-Control""no-cache");  
  35.         response.setDateHeader("Expires"0);  
  36.         try {  
  37.             response.getWriter().write(text);  
  38.         } catch (IOException e) {  
  39.         }  
  40.     }  
  41.   
  42. }  
将结果串设置到response中,返回给调用者!

1.3 cn.xinxing.json.status  这个包定义响应状态有关的。

1.3.1 StatusCode ,定义响应状态码

[java]  view plain  copy
  1. package cn.xinxing.json.status;  
  2.   
  3. /** 
  4.  *  
  5.  * 返回code 
  6.  */  
  7. public class StatusCode {  
  8.   
  9.     public static String CODE_SUCCESS = "ok";//访问成功  
  10.   
  11.     public static String CODE_ERROR = "0001"//访问错误  
  12.   
  13.     public static String CODE_ERROR_PARAMETER = "0002";//参数错误  
  14.   
  15.     public static String CODE_ERROR_PROGRAM = "0003";//程序异常  
  16.   
  17.     public static String CODE_ERROR_NO_LOGIN_OR_TIMEOUT = "0004";//未登录或登录超时,请重新登录  
  18.   
  19.     public static String CODE_ERROR_EXIST_OPERATION = "0005";//已操作  
  20.   
  21. }  
这个类中定义了接口中使用到的所有响应状态码。具体的定义规则,都是开发者定义的!没有什么标准规范!

1.3.2 StatusHouse,将code和msg组装到一起,在使用时更加方便!

[java]  view plain  copy
  1. package cn.xinxing.json.status;  
  2.   
  3. /** 
  4.  * 状态封装类 
  5.  * 将code和msg组合到一起,方便使用 
  6.  */  
  7. public class StatusHouse {  
  8.     public static StatusObject COMMON_STATUS_OK = new StatusObject(StatusCode.CODE_SUCCESS, "访问成功");  
  9.     public static StatusObject COMMON_STATUS_ERROR = new StatusObject(StatusCode.CODE_ERROR, "访问错误,错误码:(" + StatusCode.CODE_ERROR + ")");  
  10.     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 + ")");  
  11.     public static StatusObject COMMON_STATUS_ERROR_PROGRAM = new StatusObject(StatusCode.CODE_ERROR_PROGRAM, "程序异常,错误码:(" + StatusCode.CODE_ERROR_PROGRAM + ")");  
  12.     public static StatusObject COMMON_STATUS_ERROR_PARAMETER = new StatusObject(StatusCode.CODE_ERROR_PARAMETER, "参数错误,错误码:(" + StatusCode.CODE_ERROR_PARAMETER + ")");  
  13.     public static StatusObject COMMON_STATUS_EXIST_OPERATION = new StatusObject(StatusCode.CODE_ERROR_EXIST_OPERATION, "已操作,错误码:(" + StatusCode.CODE_ERROR_EXIST_OPERATION + ")");  
  14. }  
1.3.3 StatusObject  定义了拥有code和msg属性的对象,在上面的StatusHouse类中使用到!

[java]  view plain  copy
  1. package cn.xinxing.json.status;  
  2.   
  3. /** 
  4.  * 状态对象 
  5.  */  
  6. public class StatusObject {  
  7.     // 状态码  
  8.     private String code;  
  9.   
  10.     // 状态信息  
  11.     private String msg;  
  12.   
  13.     public StatusObject(String code, String msg) {  
  14.         super();  
  15.         this.code = code;  
  16.         this.msg = msg;  
  17.     }  
  18.   
  19.     public String getCode() {  
  20.         return code;  
  21.     }  
  22.   
  23.     public void setCode(String code) {  
  24.         this.code = code;  
  25.     }  
  26.   
  27.     public String getMsg() {  
  28.         return msg;  
  29.     }  
  30.   
  31.     public void setMsg(String msg) {  
  32.         this.msg = msg;  
  33.     }  
  34.   
  35. }  
1.4 cn.xinxing.json.utils 这个包是有关json解析的,只有一个JackJsonUtils 类。

1.4.1 JackJsonUtils ,因为项目中使用的是jackjson来处理json。

[java]  view plain  copy
  1. package cn.xinxing.json.utils;  
  2.   
  3. import com.fasterxml.jackson.databind.ObjectMapper;  
  4.   
  5. /** 
  6.  * jackjson 
  7.  */  
  8. public class JackJsonUtils {  
  9.     static ObjectMapper objectMapper;  
  10.     /** 
  11.      * 解析json 
  12.      *  
  13.      * @param content 
  14.      * @param valueType 
  15.      * @return 
  16.      */  
  17.     public static <T> T fromJson(String content, Class<T> valueType) {  
  18.         if (objectMapper == null) {  
  19.             objectMapper = new ObjectMapper();  
  20.         }  
  21.         try {  
  22.             return objectMapper.readValue(content, valueType);  
  23.         } catch (Exception e) {  
  24.             e.printStackTrace();  
  25.         }  
  26.         return null;  
  27.     }  
  28.   
  29.     /** 
  30.      * 生成json 
  31.      *  
  32.      * @param object 
  33.      * @return 
  34.      */  
  35.     public static String toJson(Object object) {  
  36.         if (objectMapper == null) {  
  37.             objectMapper = new ObjectMapper();  
  38.         }  
  39.         try {  
  40.             return objectMapper.writeValueAsString(object);  
  41.         } catch (Exception e) {  
  42.             e.printStackTrace();  
  43.         }  
  44.         return null;  
  45.     }  
  46. }  
这个类有两个方法,fromJson()和toJson(),他们分别是解析json和生成json字符串的!

好了,有关响应以及json这么多。有疑问的,请多看几遍!
二、cn.xinxing.model 这个包定义实体类。只有一个Students类,类中定义了几个属性,以及实现了get()和set()方法。此处就不展开了!

三、 cn.xinxing.service.student  定义一个服务层,用于提供数据以及封装下层实现。

3.1  StudentService 这是接口,定义了获取学生数据相关的方法。

[java]  view plain  copy
  1. package cn.xinxing.service.student;  
  2.   
  3. import java.util.List;  
  4.   
  5. import cn.xinxing.model.Students;  
  6.   
  7. /** 
  8.  * 获取学生数据接口 
  9.  */  
  10. public interface StudentService {  
  11.     public List<Students> getAllStudents();//获取所有的学生数据  
  12. }  

3.2 cn.xinxing.service.student.impl 这个包实现了上文中定义的接口,只有一个实现类StudentServiceImpl ,看具体实现,

[java]  view plain  copy
  1. package cn.xinxing.service.student.impl;  
  2.   
  3. import java.util.List;  
  4.   
  5. import cn.xinxing.business.StudentBusiness;  
  6. import cn.xinxing.model.Students;  
  7. import cn.xinxing.service.student.StudentService;  
  8.   
  9. /** 
  10.  * 接口实现 
  11.  */  
  12. public class StudentServiceImpl implements StudentService{  
  13.   
  14.     @Override  
  15.     public List<Students> getAllStudents() {  
  16.         // TODO Auto-generated method stub  
  17.         return StudentBusiness.getAllStudents(); //调用具体的获取学生数据方法  
  18.     }  
  19.   
  20. }  
getAllStudents()方法只是调用了其他地方的获取数据的方法。这个地方就是这么简单! 大笑

至此,项目中的全部代码都已经展示完了!相信仔细阅读这两篇文章后,大家应该对java web 接口开发有了更深的了解!如果,还有其他疑问,欢迎指出!

最后补上,例子下载地址

PS:   这里还想再多说几句!java接口开发,这个在正式项目中,需要涉及很多方面的知识,例如,数据库使用框架来维护,整个服务部署至云服务上等等!想要掌握这些东西,需要花费很多的时间和精力!我自己是一直做Android应用,接口开发是自己的自学的。java 接口开发这几篇博文呢,都只是初级的入门级的,在正式项目中呢,肯定不能这样做。目前的还有需要学习很多东西,希望和大家一块学习!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值