首先:在一个实体对象中有这么个属性:
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar captureEndTime;
json字符串长这个样:
**
**直接传Json字符串后处理:**
<param>{
"OccurDate":"2019-03-06 12:35:20",
"DetectDate":"2020-03-06 12:35:20"
}
</param>
**
net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(param);
CaseRequest params = (CaseRequest) net.sf.json.JSONObject.toBean(json, CaseRequest.class);
报了个错:
net.sf.json.JSONException: Error while setting property=captureEndTime type class java.lang.String
原因:
这是因为 XMLGregorianCalendar 不能接收String字符串
查了很久。。。
然后因为不能改对象类型,所以只能转转转了。。。。
从json字符串中获取一个日期格式
Object flag = json.get("OccurDate");
在该键值不为空的情况下:
if (flag != null) {
String OccurDate = json.getString("OccurDate");
//先将字符串转成date类型
Date OccurDates = DateUtils.stringToDate(OccurDate);
//再将date转xmlDate。。。。
XMLGregorianCalendar xmlGregorianCalendar = DateUtils.dateToXmlDate(OccurDates);
//最后set
params.setOccurDate(xmlGregorianCalendar);
}
DateUtils:
/**
*将字符串转换为date
*
* */
public static Date stringToDate(String time){
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = dateFormat.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 将Date类转换为XMLGregorianCalendar
*
* @param date
* @return
*/
public static XMLGregorianCalendar dateToXmlDate(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
DatatypeFactory dtf = null;
try {
dtf = DatatypeFactory.newInstance();
} catch (DatatypeConfigurationException e) {
}
XMLGregorianCalendar dateType = dtf.newXMLGregorianCalendar();
dateType.setYear(cal.get(Calendar.YEAR));
// 由于Calendar.MONTH取值范围为0~11,需要加1
dateType.setMonth(cal.get(Calendar.MONTH) + 1);
dateType.setDay(cal.get(Calendar.DAY_OF_MONTH));
dateType.setHour(cal.get(Calendar.HOUR_OF_DAY));
dateType.setMinute(cal.get(Calendar.MINUTE));
dateType.setSecond(cal.get(Calendar.SECOND));
return dateType;
}