1. 程式人生 > >java 後臺返回json資料給前臺

java 後臺返回json資料給前臺

第一步:新建一個JsonBinder.java類,程式碼如下:

import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.springframework.util.StringUtils;

public class JsonBinder {
private static Logger logger = LogManager.getLogger(JsonBinder.class);

private ObjectMapper mapper;

@SuppressWarnings("deprecation")
private JsonBinder( JsonSerialize.Inclusion inclusion) {
mapper = new ObjectMapper(); 

//設定輸出包含的屬性
mapper.getSerializationConfig().setSerializationInclusion(inclusion);

//設定輸入時忽略JSON字串中存在而Java物件實際沒有的屬性
mapper.getDeserializationConfig().set(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,false);
}
public JsonBinder(){

}

/**
* 建立輸出全部屬性到Json字串的Binder.
*/
public static JsonBinder buildNormalBinder() {
return new JsonBinder(JsonSerialize.Inclusion.ALWAYS);
}

/**
* 建立只輸出非空屬性到Json字串的Binder.
*/
public static JsonBinder buildNonNullBinder() {
return new JsonBinder(JsonSerialize.Inclusion.NON_NULL);
}

/**
* 建立只輸出初始值被改變的屬性到Json字串的Binder.
*/
public static JsonBinder buildNonDefaultBinder() {
return new JsonBinder(JsonSerialize.Inclusion.NON_DEFAULT);
}

/**
* 建立只輸出初始值被改變的屬性到Json字串的Binder.
*/
public static JsonBinder buildNonEmptyBinder() {
return new JsonBinder(JsonSerialize.Inclusion.NON_EMPTY);
}

/**
* 如果JSON字串為Null或"null"字串,返回Null.
* 如果JSON字串為"[]",返回空集合.
* 
* 如需讀取集合如List/Map,且不是List<String>這種簡單型別時使用如下語句:
* List<MyBean> beanList = binder.getMapper().readValue(listString, new TypeReference<List<MyBean>>() {});
*/
public <T> T fromJson(String jsonString, Class<T> clazz) {
try {
return mapper.readValue(jsonString, clazz);
} catch (IOException e) {
logger.warn("parse json string error:" + jsonString, e); 
return null;
}
}


/**
* 如果物件為Null,返回"null".
* 如果集合為空集合,返回"[]".
*/
public String toJson(Object object) {

try {
return mapper.writeValueAsString(object);
} catch (IOException e) {
logger.warn("write to json string error:" + object, e);
return null;
}
}

/**
* 設定轉換日期型別的format pattern,如果不設定預設列印Timestamp毫秒數.
*/
public void setDateFormat(String pattern) {
if (StringUtils.hasText(pattern)) {
DateFormat df = new SimpleDateFormat(pattern);
mapper.getSerializationConfig().withDateFormat(df);
mapper.getDeserializationConfig().withDateFormat(df);
}
}

/**
* 取出Mapper做進一步的設定或使用其他序列化API.
*/
public ObjectMapper getMapper() {
return mapper;
}
/**
* 字元轉換MAP
* @param line
* @return
*/
public Map<String ,Object> stringMap(String line){
String lineString=line.replace("{", "");
String linString=lineString.replace("}","");
Map<String ,Object> retMap=new HashMap<String, Object>();
String [] lineStrings=linString.split(",");
for (int i = 0; i < lineStrings.length; i++) {
String lenString=lineStrings[i].trim();
String lidd[]=lenString.split("=");
retMap.put(lidd[0].trim(),lidd[1].trim());
}
return retMap;
}

}

第二步:新建一個JsonReturnModel.java類,程式碼如下:

import java.io.Serializable;

public class JsonReturnModel implements Serializable {
private static final long serialVersionUID = -6705263054881844917L;
private boolean success;// 是否成功
private int code;
private String msg; // 返回訊息

public int getCode() {
return code;
}

public void setCode(int code) {
this.code = code;
}

public JsonReturnModel() {
}

public JsonReturnModel(boolean success, int code, String msg) {
this.success = success;
this.code = code;
this.msg = msg;
}

public JsonReturnModel(boolean success, String msg) {
this.success = success;
this.msg = msg;
}

public boolean getSuccess() {
return success;
}

public void setSuccess(boolean success) {
this.success = success;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}
}

第三步:測試

import java.io.UnsupportedEncodingException;
import com.sqzw.sms.util.JsonBinder;
import com.sqzw.sms.util.JsonReturnModel;
public class Test {
public static void main(String[] args) throws UnsupportedEncodingException {
JsonReturnModel jm=new JsonReturnModel(true,0,"連線伺服器成功");
JsonBinder jsonbinder=JsonBinder.buildNonNullBinder();
String result=jsonbinder.toJson(jm);
System.out.println(result);
}
}

執行結果如下:

{"success":true,"code":0,"msg":"連線伺服器成功"}

第四步:新建一個SmsSendMessageAction.java類 繼承ActionSupport,程式碼如下:

import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.sqzw.sms.util.Common;
import com.sqzw.sms.util.JsonReturnModel;
public class SmsSendMessageAction extends ActionSupport{
private static final long serialVersionUID = 1087655523102850222L;
private Logger logger=LogManager.getLogger(SmsSendMessageAction.class);
private HttpServletResponse response = null; 
/**
* @method:checkService
* @desc 驗證連線伺服器是否成功
* @since 2012-07-16
* @author fx
*/
public void checkService(){
response=ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
try{
response.getWriter().print(Common.returnJsonResult(new JsonReturnModel(true,0,"連線伺服器成功")));
return;

}catch(Exception ex){
try {
response.getWriter().print(Common.returnJsonResult(new JsonReturnModel(false,-1,"連線伺服器失敗")));
} catch (IOException e) {
// TODO Auto-generated catch block
logger.error("連線伺服器失敗::"+e.getMessage());
}
logger.error("連線伺服器失敗::"+ex.getMessage());

}finally{
try {
response.getWriter().close();
} catch (Exception e) {
logger.error("SmsSendMessageAction類中的|checkService()關閉IO流出錯::"+e.getMessage());

}
}
}
}

執行結果如下: