java 後臺返回json資料給前臺
阿新 • • 發佈:2019-01-29
第一步:新建一個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());
}
}
}
}
執行結果如下:
![](http://img.my.csdn.net/uploads/201210/16/1350371394_5225.jpg)