对前台传过来的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>







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

JSONObject 保存和传送 数组数据 ,如int[] ,double[] ,String[]...

上图为转换
  • yangbo437993234
  • yangbo437993234
  • 2014年07月12日 16:03
  • 8507

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

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

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

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

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

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

js数组传值 到后台处理(json)

在项目中遇到要在前台传数组到后台去,如果一直用string拼接的话,就感觉有点没那么好用,就想到用传数组。我的处理方式是先将要传的值保存数组,然后由数组转成JSON格式传到后台。 1、js 代码: v...
  • yu757371316
  • yu757371316
  • 2015年07月25日 11:26
  • 4416

JS当中的数组如果通过JSON格式传递到后台

在开发的过程中。我们往往涉及到一些需求。我们拿到的数据不是一个固定的值。 如下所示: 我们可以看到一个多级树。那么我们要做的就是将选中的节点传递到后台。然后完成我们的业务需求。 于是我们...
  • u013059555
  • u013059555
  • 2015年11月19日 13:45
  • 2204

JSON传java对象数组到后台解析

前台对象为ligerUI表格中的数据 1).首先获取需要转发的对象数据(使用ligerUI的内置方法) var rowArr = manager.getSelectedRows(); 2).使用...
  • wdp1121
  • wdp1121
  • 2017年03月29日 09:03
  • 818

获取传的json数据解析成数组

if (Request.QueryString["json"] != null) // { using (System.IO.S...
  • Top_xin
  • Top_xin
  • 2014年07月10日 14:56
  • 4217

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

页面上有一个数组,里面存放了多个json,需要将该数组作为参数传给java后台  $.ajax({ url:'./service/iposremoteapprove/c...
  • Allen_liyu
  • Allen_liyu
  • 2017年06月07日 15:20
  • 4834

前台传过来的json数据,解析request

/** * 解析前台获得的交互数据 * @param request * @return * @throws IOException */ public static JSONObject...
  • yikong2yuxuan
  • yikong2yuxuan
  • 2017年04月13日 20:11
  • 1201
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对前台传过来的json对象或数组进行转化
举报原因:
原因补充:

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