最近用到了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 类来实现。

参考:net.sf.json.JSONObject 转实体类时遇到 空“”被赋值一个当前时间的问题


本文转载:CSDN博客