MorphDynaBean 对象转换具体的实体POJO对象

在使用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() {
    }
    省略getset方法。。。

后端接收

     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()获取到的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值