在使用JSONObject對象把獲取到的字符串轉換成項目中的實體對象時經常會發現被轉換成了MorphDynaBean對象,非常噁心,如下方法可把字符串轉換成自己想要的對象。
JSONObject jsonObject = JSONObject.fromObject(str);
Map<String,Class> classMap = new HashMap<>();
classMap.put("list_data", AdsReportWarnPlacePeriodWeek.class);
classMap.put("summary_info_data", AdsReportWarnPlaceRegularWeek.class);
//轉換對象
WordAndPDFTemplateVo wordOrPdfVo = (WordAndPDFTemplateVo) JSONObject.toBean(jsonObject, WordAndPDFTemplateVo.class,classMap);
舉例:
具體場景,前端有一些配裝的字符,提交至後端後需要轉換稱具體的vo或者pojo實體進其他操作。
如:
function appedData(type) {
var WordOrPDFVo = {
// 工作日環比分析圖表svg字符串
anylize_avg:slice_chart.getSVG() + "_" +on_ramp_chart.getSVG() + "_" +off_ramp_chart.getSVG() + "_"
+ inter_chart.getSVG(),
// 時段分析圖表svg字符串
summary_charts_svg: morning_peak_chart.getSVG() + "_" + off_peak_chart.getSVG() + "_" + noon_peak_chart.getSVG(),
// 報告標題
report_title:report_title_vo,
// 1.總體分析
// 總體分析標題
allringtatio_title:allringtatio_title_vo,
title_all:title_all_vo,
data_all:data_all_vo,
title_weekday:title_weekday_vo,
data_weekday:data_weekday_vo,
title_notweekday:title_notweekday_vo,
data_notweekday:data_notweekday_vo,
title_charts:title_charts_vo,
title_summary:title_summary_vo,
title_line_summary:title_line_summary_vo,
line_summary:line_summary_vo,
// 2、本週環比上週平均報警數量大幅度上升和下降點位解析
week_title:week_title_vo,
week_info_title:week_info_title_vo,
list_line:list_line_vo,
list_data:list_data_vo,
// 3.工作日高架分類別、分時段 TOP 報警點位及相應信號燈調控次數和效果分析
highway_title:highway_title_vo,
highway_info_title:highway_info_title_vo,
highway_info_data:highway_info_data_vo,
// 4、工作日路口分類別、分時段 TOP 報警點位及相應信號燈調控次數分析
inter_title:inter_title_vo,
inter_info_title:inter_info_title_vo,
inter_info_data:inter_info_data_vo,
inter_info_data_summary:inter_info_data_summary_vo,
// 5、總論
summary_title:summary_title_vo,
summary_info_title:summary_info_title_vo,
summary_info_line:summary_info_line_vo,
summary_info_data:summary_info_data_vo,
export_type:type
};
$("#str").val(JSON.stringify(WordOrPDFVo));
}
$(function(){
$("#btn_word").bind("click",function(){
appedData("word");
$("#form1").attr("action","createWordOrPdf")
$("#form1").submit();
$("#str").val("");
});
$("#btn_pdf").bind("click",function(){
appedData("pdf");
$("#form1").attr("action","createWordOrPdf")
$("#form1").submit();
$("#str").val("");
});
});
實體:
public class WordAndPDFTemplateVo {
// 報告標題
private String report_title;
// 1.總體分析
// 總體分析標題
private String allringtatio_title;
private String title_all;
private List<String> data_all;
private String title_weekday;
private List<String> data_weekday;
private String title_notweekday;
private List<String> data_notweekday;
private String title_charts;
private String title_summary;
private String title_line_summary;
private List<String> line_summary;
// 2、本週環比上週平均報警數量大幅度上升和下降點位解析
private String week_title;
private String week_info_title;
private List list_line;
private List<AdsReportWarnPlacePeriodWeek> list_data;
// 3.工作日高架分類別、分時段 TOP 報警點位及相應信號燈調控次數和效果分析
private String highway_title;
private String highway_info_title;
private List highway_info_data;
// 4、工作日路口分類別、分時段 TOP 報警點位及相應信號燈調控次數分析
private String inter_title;
private String inter_info_title;
private List inter_info_data;
private String inter_info_data_summary;
// 5、總論
private String summary_title;
private String summary_info_title;
private String summary_info_line;
private List<AdsReportWarnPlaceRegularWeek> summary_info_data;
// svg字符串
// 工作日環比分析圖表svg字符串
private String anylize_avg;
// 時段分析圖表svg字符串
private String summary_charts_svg;
private String export_type; // word pdf
public WordAndPDFTemplateVo() {
}
省略get、set方法。。。
後端接收
JSONObject jsonObject = JSONObject.fromObject(str);
Map<String,Class> classMap = new HashMap<>();
classMap.put("list_data", AdsReportWarnPlacePeriodWeek.class);
classMap.put("summary_info_data", AdsReportWarnPlaceRegularWeek.class);
//轉換對象
WordAndPDFTemplateVo wordOrPdfVo = (WordAndPDFTemplateVo) JSONObject.toBean(jsonObject, WordAndPDFTemplateVo.class,classMap);
如果不這樣設置接受到的所有List對象都將轉換成
List<MorphDynaBean>
這樣操作起來非常麻煩
如果轉換成MorphDynaBean對象,對其判斷其是否包含某個熟悉可以用如下方法
/**
* 檢測 DynaClass 對象中有某個屬性
* @param key
* @param dynaClass
* @return
*/
public boolean checkProperty(String key, DynaClass dynaClass){
if(dynaClass==null){
return false;
}
boolean flag = false;
try {
DynaProperty[] properties = dynaClass.getDynaProperties();
if(properties.length>0){
for(DynaProperty property:properties){
if(StringUtils.equals(property.getName(),key)){
flag = true;
break;
}
}
}
}catch (Exception e){
return flag;
}
return flag;
}
dynaClass 是 MorphDynaBean.getDynaClass()獲取到的。