最近用到了json字符串转实体类,转集合的功能,
主要代码如下:
/**
* json 字符串转集合
*
* @author lipw
* @date 2017年5月10日下午6:08:17
* @param jsonString
* @param pojoCalss
* 集合中的类
* @return
*/
public static <T> List<T> jsonToList(String jsonString, Class<T> pojoCalss) {
if (jsonString.indexOf("%5B") != -1){
try {
jsonString = URLDecoder.decode(jsonString, "utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (StringUtil.isBlank(jsonString)) {
return null;
}
try {
String[] dateFormats = new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"};
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpherEx(dateFormats, null, null, false));
//JSONUtils.getMorpherRegistry().registerMorpher(morpher);
JSONArray jsonArray = JSONArray.fromObject(jsonString);
// Java集合
@SuppressWarnings("unchecked")
List<T> list = (List<T>) JSONArray.toCollection(jsonArray, pojoCalss);
return list;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
注意,这已经是修改完的代码。
问题描述
1、当不添加以下代码的时候,总是把日期转换为当前时间:
String[] dateFormats = new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"};
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpherEx(dateFormats, null, null, false));
这里的 DateMorpherEx 是自己重写的扩展类,如果你仅仅是解决此问题,可以改为:DateMorpher,但是不能像我这样使用4个参数的构造函数,因为 DateMorpher 的 defaultValue 是不能为 null 的。
2、添加以上代码后,如果json字符串中的日期与dateFormats中的第一个不一致,就有可能产生一个问题:转换出来的日期少了一年,月分也对不上。比如json字符串中的日期格式是:2019-04-04,而dateFormats中的第一个是yyyyMMdd,那就会出问题。
3、不允许传空字符串值,否则出异常:Error while setting property=beginDate type class java.lang.String
这需要通过重写 DateMorpher 类来实现。