您的位置:首页 > 编程语言 > Java开发

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 spring mvc