第一步:新建一个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://localhost:8080/sms/checkServiceAction.action