json格式与SpringMvc接收json列表的问题
2017-08-30 22:00
411 查看
同学们都知道:
一、json的格式如下:{ platformId:3, buyerId:13626, aftersaleId:1708193111000001, orderNo:170809311032603, requiredServices:10, providerType:4, assemblyServiceDescription:'77777', providerId:13800, sku:10007248 }
json数组格式如下:[{"itemId":10000280,"cid":1004862}]
总的来说就是,用 [ ] 来包裹多个 { } , 用 : 来表示键值对 , 用 ,来连接多个键值对,这样简单的json用逗号与花括号来表示,数组类型的json用方括号包裹多个花括号,花括号内多个键值对来表示.
二、那么怎么接受数组类型的json呢,我们在用springMvc接受参数的时候,可以用@RequestParam(value = "platformId",required = true) Long platformId来接受单个参数,用@RequestBody List<List<String>> skuList来接受对象或者简单数组,用@ModelAttribute ItemCategoryStashVo itemCategoryStashVo 来接受对象,(ModelAttribute在跨域的时候,例如feign调用,会丢失值,所以feign调用可以用requestbody)
那如何接受对象类型List列表呢, 前台可以传json数组, 后台直接接受json数组字符串,然后把字符串解析成对象集合:代码如下
SpringMvc接参-->@ApiParam(value="商品与类目ID") @RequestParam String itemsIndex
转换-->
if(null != itemsIndex) {
Gson gson = new Gson();
List<ItemAuthorizationVo> itemAuthorizationVoList = gson.fromJson(itemsIndex, new TypeToken<List<ProviderCollectionItemResultVo>>() {}.getType());
}
( import com.google.gson.Gson; import com.google.gson.reflect.TypeToken;)
三、那对象如何转换为json串呢
JSONArray cidsArray = JSONArray.fromObject(cids);
JSONArray sortDatasArray = JSONArray.fromObject(sortDatas);
ObjectMapper objectMapper = new ObjectMapper();
for (int i = 0; i < cidsArray.size(); i++) {
cid = objectMapper.readValue(cidsArray.getString(i), Long.class);
categoryIds.add(cid);
}
( import net.sf.json.JSONArray; )
四、Gson与Jackson反序列化的区别
我们后台接受整参数时会接受整个对象的json字符串,我们用Gson转化成我们需要的java对象,需要注意的两点是,Gson转化时间戳字段时候会报错,jackson转化时间戳字段是不报错的,可以查看下面的例子,
package com.jd.ecc.b2b.item.service.item;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import java.util.Date;
@Slf4j
public class JacksonTest {
private static ObjectMapper objectMapper = new ObjectMapper();
@Test
public void test() {
String result = JacksonTest.encode(new Date());
log.info("=========:{}", result);
Date date = JacksonTest.decode("1517827150000", Date.class);
log.info("=========:date", date);
}
public static String encode(Object obj) {
try {
return objectMapper.writeValueAsString(obj);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将json string反序列化成对象
*
* @param json
* @param valueType
* @return
*/
public static <T> T decode(String json, Class<T> valueType) {
try {
return objectMapper.readValue(json, valueType);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将json array反序列化为对象
*
* @param json
* @param typeReference
* @return
*/
public static <T> T decode(String json, TypeReference<T> typeReference) {
try {
return (T) objectMapper.readValue(json, typeReference);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
一、json的格式如下:{ platformId:3, buyerId:13626, aftersaleId:1708193111000001, orderNo:170809311032603, requiredServices:10, providerType:4, assemblyServiceDescription:'77777', providerId:13800, sku:10007248 }
json数组格式如下:[{"itemId":10000280,"cid":1004862}]
总的来说就是,用 [ ] 来包裹多个 { } , 用 : 来表示键值对 , 用 ,来连接多个键值对,这样简单的json用逗号与花括号来表示,数组类型的json用方括号包裹多个花括号,花括号内多个键值对来表示.
二、那么怎么接受数组类型的json呢,我们在用springMvc接受参数的时候,可以用@RequestParam(value = "platformId",required = true) Long platformId来接受单个参数,用@RequestBody List<List<String>> skuList来接受对象或者简单数组,用@ModelAttribute ItemCategoryStashVo itemCategoryStashVo 来接受对象,(ModelAttribute在跨域的时候,例如feign调用,会丢失值,所以feign调用可以用requestbody)
那如何接受对象类型List列表呢, 前台可以传json数组, 后台直接接受json数组字符串,然后把字符串解析成对象集合:代码如下
SpringMvc接参-->@ApiParam(value="商品与类目ID") @RequestParam String itemsIndex
转换-->
if(null != itemsIndex) {
Gson gson = new Gson();
List<ItemAuthorizationVo> itemAuthorizationVoList = gson.fromJson(itemsIndex, new TypeToken<List<ProviderCollectionItemResultVo>>() {}.getType());
}
( import com.google.gson.Gson; import com.google.gson.reflect.TypeToken;)
三、那对象如何转换为json串呢
JSONArray cidsArray = JSONArray.fromObject(cids);
JSONArray sortDatasArray = JSONArray.fromObject(sortDatas);
ObjectMapper objectMapper = new ObjectMapper();
for (int i = 0; i < cidsArray.size(); i++) {
cid = objectMapper.readValue(cidsArray.getString(i), Long.class);
categoryIds.add(cid);
}
( import net.sf.json.JSONArray; )
四、Gson与Jackson反序列化的区别
我们后台接受整参数时会接受整个对象的json字符串,我们用Gson转化成我们需要的java对象,需要注意的两点是,Gson转化时间戳字段时候会报错,jackson转化时间戳字段是不报错的,可以查看下面的例子,
package com.jd.ecc.b2b.item.service.item;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import java.util.Date;
@Slf4j
public class JacksonTest {
private static ObjectMapper objectMapper = new ObjectMapper();
@Test
public void test() {
String result = JacksonTest.encode(new Date());
log.info("=========:{}", result);
Date date = JacksonTest.decode("1517827150000", Date.class);
log.info("=========:date", date);
}
public static String encode(Object obj) {
try {
return objectMapper.writeValueAsString(obj);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将json string反序列化成对象
*
* @param json
* @param valueType
* @return
*/
public static <T> T decode(String json, Class<T> valueType) {
try {
return objectMapper.readValue(json, valueType);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将json array反序列化为对象
*
* @param json
* @param typeReference
* @return
*/
public static <T> T decode(String json, TypeReference<T> typeReference) {
try {
return (T) objectMapper.readValue(json, typeReference);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
相关文章推荐
- springMVC_json格式数据的接收和发送(未解决中文乱码问题)
- springMVC_json格式数据的接收和发送(未解决中文乱码问题)
- springmvc返回json的日期格式问题
- 解决SpringMVC同时接收Json和Restful时Request里有Map的问题
- SpringMVC 解决IE8浏览器把返回报文格式application/json当文件下载的问题
- springmvc接收json格式数据
- springmvc学习笔记--json--返回json的日期格式问题
- springmvc中RequestMethod.GET方式不适用于json数据格式的参数接收
- springMVC接收json串问题
- fastjson和SpringMVC实现自定义HttpMessageConverter接收和获取JSON格式的数据
- 解决SpringMvc后台接收json数据中文乱码问题
- 解决SpringMvc后台接收json数据中文乱码问题的几种方法
- springMVC接收json格式
- 解决SpringMVC返回Json数据格式不严谨报异常的问题(草稿未完成)
- 关于springMVC 接收json字符串集合的问题
- springmvc--json--返回json的日期格式问题
- SpringMVC 解决IE8浏览器把返回报文格式application/json当文件下载的问题
- 关于ext与springMVC中上传文件并以JSON格式返回入STORE的问题
- 处理Json接收日期格式问题
- springmvc解决返回json的数据格式问题