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{

	@Override
	public List<Students> getAllStudents() {
		// TODO Auto-generated method stub
		return StudentBusiness.getAllStudents(); //調用具體的獲取學生數據方法
	}

}
getAllStudents()方法只是調用了其他地方的獲取數據的方法。這個地方就是這麼簡單!大笑

至此,項目中的全部代碼都已經展示完了!相信仔細閱讀這兩篇文章後,大家應該對java web 接口開發有了更深的瞭解!如果,還有其他疑問,歡迎指出!

最後補上,例子下載地址

PS:   這裏還想再多說幾句!java接口開發,這個在正式項目中,需要涉及很多方面的知識,例如,數據庫使用框架來維護,整個服務部署至雲服務上等等!想要掌握這些東西,需要花費很多的時間和精力!我自己是一直做Android應用,接口開發是自己的自學的。java 接口開發這幾篇博文呢,都只是初級的入門級的,在正式項目中呢,肯定不能這樣做。目前的還有需要學習很多東西,希望和大家一塊學習!







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章