对前台传过来的json对象或数组进行转化

原创 2015年11月27日 13:43:06

当后台需要获取前台的多个json对象或json数组时使用

1.创建转化类

<span style="font-family:Microsoft YaHei;">/**
 * 对象及对象数组传输类
 */
public class ListMapConverter {

	/**
	 * 接受的json数组对象,key值必须为objArr
	 */
	protected List<Map<String,Object>> objArr ;
	/**
	 * 接受的为一json对象,key值必须为obj
	 */
	protected Map<String,Object> obj ;
	
	public List<Map<String, Object>> getObjArr() {
		return objArr;
	}

	public void setObjArr(List<Map<String, Object>> objArr) {
		this.objArr = objArr;
	}

	public Map<String, Object> getObj() {
		return obj;
	}

	public void setObj(Map<String, Object> obj) {
		this.obj = obj;
	}

	/**
	 * 返回得到的list对象集合
	 * @return
	 */
	public <T> List<T> getListModel(Class<T> clz){
		return null == this.objArr || this.objArr.isEmpty() ? null : GsonUtil.fromJsonToList(this.objArr, clz) ;
	}
	
	/**
	 * 返回得到model对象
	 * @return
	 */
	public <T> T getModel(Class<T> clz){
		return null == this.obj || this.obj.isEmpty() ? null : GsonUtil.fromJsonToObject(this.obj,clz) ;
	}
	
}</span>
2.json工具

<span style="font-family:Microsoft YaHei;">/**
 * json工具
 * @description json的转换工具
 */
public final class GsonUtil {
	private static final Gson gson = new Gson() ;
	
	/**
	 * 这里不能直接使用new TypeToken<List<T>>(){}.getType()来转换,由于在运行时会擦除对泛型的检查,所以运行期间的泛型T被擦除之后,再转换时就会出现object的现象
	 * (如果要使用的话,在指定泛型的时候就将类型指定完整new TypeToken<List<xxx>>(){}.getType())
	 * @param json
	 * @param clz
	 * @return
	 */
	public static <T> List<T> fromJsonToList(String json,Class<T> clz){
		List<T> mList = new ArrayList<T>() ;
		JsonArray array = new JsonParser().parse(json).getAsJsonArray() ;
		for(final JsonElement elem:array){
			mList.add(GsonUtil.getGson().fromJson(elem,clz)) ;
		}
		return mList ;
	}
	
	public static <T> List<T> fromJsonToList(Object obj,Class<T> clz){
		return fromJsonToList(toJson(obj),clz) ;
	}
	
	public static <T> T fromJsonToObject(String json,Class<T> clz){
		JsonElement elem = new JsonParser().parse(json).getAsJsonObject() ;
		return gson.fromJson(elem,clz) ;
	}
	
	public static <T> T fromJsonToObject(Object obj,Class<T> clz){
		return fromJsonToObject(toJson(obj),clz) ;
	}
	
	public static String toJson(Object src){
		return gson.toJson(src) ;
	}
	
	public static Gson getGson(){
		return gson ;
	}
	
}</span>
3.Service

<span style="font-family:Microsoft YaHei;">public CommentGoods update(ListMapConverter con) throws Exception;</span>
4.impl

<span style="font-family:Microsoft YaHei;">@Override
	public CommentGoods insertOrder(ListMapConverter con) throws Exception {
		try {
			String id = UUIDUtil.generateKey();
			CommentGoods goods = con.getModel(CommentGoods.class);
			goods.setCreated(BaseUtil.timeToString(new Date()));
			goods.setId(id);
			commentGoodsMapper.insert(goods);
			saveImgs(con, goods);
			return goods;
		} catch (Exception e) {
			e.printStackTrace();
			logger.error(e.getMessage());
			throw new DBException(e);
		}
	}</span>
5.对List<String,Object>进行封装

<span style="font-family:Microsoft YaHei;">/**
	 * 对List<Map<String, Object>>进行封装
	 * 格式:[{"id":"","content":""...,"imgList":[{"imageName",""...}]   }]
	 * imgList:是图片附件
	 * @param objest
	 * @param result
	 */
	@SuppressWarnings("unchecked")
	public void transf(List<Map<String, Object>> objest,List<Map<String,Object>> result) {
		for (Map<String, Object> map : objest) {
			boolean istrue = false;
			for (Map<String, Object> r : result) {
				if(r.get("id").equals(map.get("goods_id"))){
					istrue = true;
					Map<String,Object> code = new HashMap<String,Object>() ;
					code.put("attid", map.get("attachment_id"));
					code.put("imageName", map.get("imageName"));
					code.put("imageUpdateName", map.get("imageUpdateName"));
					code.put("url", map.get("url"));
					code.put("commentId", map.get("commentId"));
					code.put("createDate", map.get("createDate"));
					((List<Map<String,Object>>)r.get("imgList")).add(code);
				}
			}
			if(!istrue){
				Map<String,Object> temp = new HashMap<String,Object>() ;
				List<Map<String,Object>> codeList = new ArrayList<Map<String,Object>>() ;
				temp.put("id", map.get("goods_id"));
				temp.put("content", map.get("content"));
				temp.put("startLevel", map.get("startLevel"));
				temp.put("service", map.get("service"));
				temp.put("stream", map.get("stream"));
				temp.put("conform", map.get("conform"));
				temp.put("userid", map.get("userid"));
				temp.put("goodsId", map.get("goodsId"));
				temp.put("created", map.get("created"));
				Map<String,Object> code = new HashMap<String,Object>() ;
				code.put("attid", map.get("attachment_id"));
				code.put("imageName", map.get("imageName"));
				code.put("imageUpdateName", map.get("imageUpdateName"));
				code.put("url", map.get("url"));
				code.put("commentId", map.get("commentId"));
				code.put("createDate", map.get("createDate"));
				codeList.add(code);
				temp.put("imgList", codeList);
				result.add(temp) ;
			}
		}
	}</span>
6.Controller

<span style="font-family:Microsoft YaHei;">@RequestMapping(value="/addCommentGoods",method=RequestMethod.POST)
	public ResultData addCommentGoods(ListMapConverter con){
			try {
				return new ResultData(commentGoodsService.insertOrder(con));
			} catch (Exception e) {
				return SchExceptionUtil.ExceptionConvertState(e);
			}
	}</span>







版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

后台转换JSON数据类型,前台解析JSON数据

JSON对象: JSONObject obj = new JSONObject(); obj.put("result", 0); obj.put("message", message); re...

前台 JSON对象转换成字符串 相互转换 的几种方式

在最近的工作中,使用到JSON进行数据的传递,特别是从前端传递到后台,前台可以直接采用ajax的data函数,按json格式传递,后台Request即可,但有的时候,需要传递多个参数,后台使用requ...

spring mvc 接收前台传来的json对象

转:http://692088846.iteye.com/blog/2001715   1:自己研究的     1) 页面ajax代码       Js代码      ...

json 传回的是数组和非数组的解决的方法

1.List booktypes = booktypeService.find("from Booktype where parent=null"); 下面就是数组

《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

先看一下我要实现的功能界面:       这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好。这个页面主要实现的是授课,即给老师教授的课程分配学生。此页面实现功能...

Java后台如何接收并处理前台传过来的json格式的数组参数

页面上有一个数组,里面存放了多个json,需要将该数组作为参数传给java后台。 var data= [{name:"jon",age:"12"},{name:"jic",age:"18"},{na...

Json:前台对象数组传到后台解析

方法:使用JsonArray进行解析 步骤: 一、引入一系列JAR包       要使程序便于解析json,首先引入json-lib包,son-lib包同时依赖于5个JAR包:(前5个为依赖包); ...
  • kymegg
  • kymegg
  • 2016年03月23日 16:47
  • 15751

JSON转换成数组集合

package com.jshop.action.tools; import java.util.ArrayList; import java.util.HashMap; import ...

AJAX - 前台传JSON到后台

【1】contentType默认为application/x-www-form-urlencoded的情况var url = "person.action"; var jsonStr = {"name...
  • J080624
  • J080624
  • 2017年01月18日 09:48
  • 3021

ASP.NET中使用JSON方便实现前台与后台的数据交换

一、前台向后台请求数据 在页面加载时,有时需要对一些表单进行初始化,此时可以利用JQuery的 get 函数向后台发起异步请求:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对前台传过来的json对象或数组进行转化
举报原因:
原因补充:

(最多只允许输入30个字)