我之前的代码一直都比较凌乱(虽然有无数的注释),嘿嘿!然后,带领我的大牛告诉我说Java的Commons下有许多的工具类,利用它们就可以使我们的代码更简洁了。
现在就实际用到的分享如下,没用到的慢慢学习积累吧!
1.XMLConfiguration——解析xml及properties文件
我们知道,解析xml文件的最基本方式有两种:DOM解析和SAX解析。可能大家和我一样,之前都是用的是这么繁琐的解析方式。
下面这个是SAX解析:
public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {//输入流中传送的是xml格式的内容
// 将解析结果存储在HashMap中
Map<String, String> map = new HashMap<String, String>();
// 从request中取得输入流
InputStream inputStream = request.getInputStream();
SAXReader reader = new SAXReader();
Document document = reader.read(inputStream);
Element root = document.getRootElement();
List<Element> elementList = root.elements();
// 遍历所有子节点
for (Element e : elementList)
map.put(e.getName(), e.getText());
// 释放资源
inputStream.close();
inputStream = null;
return map;
}//然后,我们<span style="color:#ff0000;">可以从map中获得对应的节点的值</span>,这里就不写了
使用org.apache.commons.configuration.XMLConfiguration工具类:
public static XMLConfiguration getConfig(HttpServletRequest request){
//使用commons-configuration工具类解析用户发过来的xml消息
XMLConfiguration config = new XMLConfiguration()
config.setDelimiterParsingDisabled(true);//加载文件前设置分隔符失效(不使用任何分隔符).
try {
config.load(request.getInputStream());//加载输入流中的xml
} catch (Exception e) {
e.printStackTrace();
}
return config;
}
/**
* 设置响应给用户的消息
* @param request
* @return
*/
public static RespTextMessage setRespTextMessage(HttpServletRequest request) {
RespTextMessage textMessage = new RespTextMessage();
XMLConfiguration config = getConfig(request);
//通过XMLConfiguration可以直接获得xml中的指定属性的值
String fromUserName = config.getString("FromUserName"); // 发送方微信号,若为普通用户,则是一个OpenID
String toUserName = config.getString("ToUserName"); // 公众帐号,开发者微信号,接收方微信号
//其次,设置响应给用户的消息
textMessage.setToUserName(fromUserName);//设置接收方帐号,即普通用户
textMessage.setFromUserName(toUserName);//设置发送方帐号,即公众帐号
textMessage.setCreateTime(new Date().getTime());//设置响应时间为当前时间
textMessage.setMsgType(ImarkContants.MSG_TEXT);//设置响应消息类型为文本消息
textMessage.setFuncFlag(0);
return textMessage;
}
另外,XMLConfiguration解析属性文件等功能。
2.MapUtils——操作map或SortedMap 实例的工具类
org.apache.commons.collections.MapUtils此工具类提供了大致有如下方法:
假设我们现在从数据库中查到一个map集合:
Map<String,Object> map= this.baseDao.findFirst(sql);
通常我们判断是否为空或null,需要写"map==null || map.isEmpty";我们可以使用MapUtils的isEmpty方法来直接判断“MapUtils.isEmpty(map)”,也就是isEmpty方法封装了前面的那条语句。
putAll方法可以将数组的键值对放入到一个map中,例如:
String[][] str = new String[][] { {"RED", "#FF0000"},{"GREEN", "#00FF00"},{"BLUE", "#0000FF"}};
Map colorMap = MapUtils.putAll(new HashMap(), str);
另外,org.apache.commons.lang.StringUtils这个类的isEmpty可以判断字符串是否为null或empty,而不需要我们这样判断“str == null || str.length() == 0”。
3.JSON,JSONArray——处理json数据
这两个是com.alibaba.fastjson包下的工具类,举个例子,
String jsonStr = "[{'1.':'1'},{'2.':'22'},{'3.':'333'},{'4.':'4444'},{'5.':'55555'}]";
List jsonList =JSONArray.parseArray(respContent);//json字符串转换为list
Object json = jsonList.get(3);//随机获得list的第3条记录
String str = JSON.toJSONString(json);//转换为String,“4444”
上面标红jsonList的那一行获得的第3条记录返回的是个Object对象,不能直接转换为字符串,所以又使用JSON.toJSONString(json)来转换为String类型。
这样比较麻烦,所以我们可以在使用parseArray的时候,直接指定返回类型即可。
List<String> jsonList1 = JSONArray.parseArray(respContent,String.class);//json字符串转换为list
String str1 = jsonList1.get(0);
另外也可以转换为JavaBean类,如XXX:
List<XXX> listPerson =JSON.parseArray(jsonString, XXX.class);
此工具类的maven坐标为:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.35</version>
</dependency>