java 实现元数据对象与json数据互转

在项目中遇到逻辑上有几个关联关系的对象需要一次展现给客户端,一种实现方法是前台获取数据后将数据分别保存到不同的表中,这种方式的弊端就是取得时候需要关联很多数据,展现的逻辑比较复杂。另一种方式就是下面的方式,转换成对象保存元数据,展现的时候只需要取一个字段的值就可以了。

json 数据 :

{"success": true, "results":[{"code":"HOMEPAGE","models":[
{"id":"COMPONENT_1","name":"cmp.txtTabNameTodo","sn":1,"xtype":"portaltodolistbrief","zoneId":"homepage_z1"},
{"id":"COMPONENT_2","name":"cmp.txtTabNameAgent","sn":2,"xtype":"agenttodolistbrief","zoneId":"homepage_z1"},
{"id":"COMPONENT_3","name":"cmp.txtTabNameTrace","sn":3,"xtype":"tracelistbrief","zoneId":"homepage_z2"},
{"id":"COMPONENT_5","name":"cmp.txtTabNameMostUsed","sn":5,"xtype":"docfolderlistpanel","zoneId":"homepage_z2"}],
"name":"2区域模板","tabWidth":"200","title":"main.txtTabHomepage","zoneNum":2}]}

前台数据提交定义(采用Extjs MVC框架):

saveZone :function(button){
		var win=Ext.ComponentQuery.query('customconfigwindow')[0];		
		var template=win.down('field[name=template]').getValue();
		var models=[];
		var tabPanel=Ext.ComponentQuery.query('portalcomponentabs')[0];
		for(var i=0;i<template;i++){
			var tab=tabPanel.setActiveTab(i);
			tab.down('portalzonelist').store.each(function(record){
										record.set('zoneId',tab.id);
										models.push(record.data);
									});									
		}
		var url='model/Model_saveModel.action?template='+template;		
		Ext.Ajax.request( {
			url : url,
			waitMsg : message.wait,
			method : 'post',
			params : {models : "{\"viewModel\":"+Ext.encode(models)+"}"},封装成json对象
			success : function(response, action) {
				var responseJson = Ext.JSON.decode(response.responseText);
				success = responseJson.success;
				if (!success)
					showException(responseJson.failedMessage);
				else{
					Ez.msg('数据保存成功!');
					Ext.suspendLayouts();
					Ext.resumeLayouts(true);
				}
			},
			failure : function(form, action) {
				showAjaxError(action);
			}
		});
	}
后台创建封装对象的实体类,json数据映射为对象保存:

1、action 层代码

public void saveModel(){
		String modelJosn= Struts2Utils.getParameter("models");
		String template = Struts2Utils.getParameter("template");
		ObjectMapper objectMapper =new ObjectMapper(); //这里使用ObjectMapper来实现json与
		try {
			ViewModelList models=objectMapper.readValue(modelJosn, ViewModelList.class);
			portalService.saveModel(models,Integer.parseInt(template));
			CommonRender.renderSucessJsonMsg();
		} catch (JsonParseException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
2、service层代码
public void saveModel(ViewModelList models,int zoneNum){
		
		Timestamp now = new Timestamp(System.currentTimeMillis());
		PortalPageTemplate template = portalTemplateDao.getTemplate(zoneNum);
		
		ViewPage page = new ViewPage();		
		page.setCode(template.getCode());
		page.setName(template.getName());
		page.setTabWidth(template.getTabWidth());
		page.setTitle(template.getTitle());
		page.setModels(models.getViewModel());
		page.setZoneNum(zoneNum);
		
		JSONObject jsonObject=JSONObject.fromObject(page); //将对象转换为json
		
		PortalPage portalPage = new PortalPage();
		portalPage.setId(null);
		portalPage.setMetaData(jsonObject.toString());
		portalPage.setPortalPageTemplate(template);
		portalPage.setDeleteFlag(false);
		
		portalPageDao.save(portalPage);
	}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值