本文主要详细介绍了以下三个问题:
- 客户端如何把json传给服务端
- 客户端传给服务端的json如何转成实体类
- 客户端传给服务端的json格式,如果是嵌套的json,服务端如何处理
注:本人使用json格式为alibaba.fastjson.JSON
问题1:
坑1:客户端写JS的时候,把json传给服务端,服务端无论怎么获取都获取不到,一直为null。
解答:客户端写JS的时候把json转成字符串发给服务端,JS把json转换成字符串方法如下:
var paramJson = JSON.stringify(json);
转换了以后,服务端就可以当成字符串进行获取了。
问题2:
服务端接收json转成实体类有2种方式
json格式
[
{
"A":{"name":"XXXXXX", "id":"XXXXXX"},
"B":{"name":"XXXXXX", "id":"XXXXXX"},
"C":{"name":"XXXXXX", "id":"XXXXXX"},
"D":{"name":"XXXXXX", "id":"XXXXXX"},
},
{
"A":{"name":"YYYYYY", "id":"YYYYYY"},
"B":{"name":"YYYYYY", "id":"YYYYYY"},
"C":{"name":"YYYYYY", "id":"YYYYYY"},
"D":{"name":"YYYYYY", "id":"YYYYYY"},
},
{
"A":{"name":"ZZZZZZ", "id":"ZZZZZZ"},
"B":{"name":"ZZZZZZ", "id":"ZZZZZZ"},
"C":{"name":"ZZZZZZ", "id":"ZZZZZZ"},
"D":{"name":"ZZZZZZ", "id":"ZZZZZZ"},
}
]
第一种:使用spring注解@requestbody
controller方法
@RequestMapping(value = "save")
@ResponseBody
public JSONObject save(@RequestBody List<ParentEntity> A) {
//具体业务
XXXXX
}
第二种方法:使用字符串接收,强转成实体类
controller方法
@RequestMapping(value = "save")
@ResponseBody
public JSONObject save(HttpServletRequest request) {
//获取json
String paramJson = request.getParameter("paramJson");
//转成就list
List<ParentEntity> lists = JSON.parseArray(paramJson, ParentEntity.class);
//具体业务
XXXXX
}
注意:下面实体类一定要按照json格式来进行写,否者会报解析失败
实体类ParentEntity
public class ParentEntity {
private ChildEntity A;
private ChildEntity B;
private ChildEntity C;
private ChildEntity D;
public ChildEntity getA() {
return A;
}
public void setA(ChildEntity a) {
A = a;
}
public ChildEntity getB() {
return B;
}
public void setB(ChildEntity b) {
B = b;
}
public ChildEntity getC() {
return C;
}
public void setC(ChildEntity c) {
C = c;
}
public ChildEntity getD() {
return D;
}
public void setD(ChildEntity d) {
D = d;
}
}
实体类ChildEntity
public class ChildEntity {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
问题3:
嵌套json的时候,如果想转成实体类只能使用字符串接收,强转成实体类这个方法,而无法使用spring注解@requestbody,因为超过3层json的使用,spring解析不了
json格式
[
{
"A":{"name":"XXXXXX", "id":"XXXXXX"},
"B":{"name":"XXXXXX", "id":"XXXXXX"},
"C":{"name":"XXXXXX", "id":"XXXXXX"},
"D":[
{"name":"XXXXXX", "id":"XXXXXX"},
{"name":"XXXXXX", "id":"XXXXXX"}
]
},
{
"A":{"name":"YYYYYY", "id":"YYYYYY"},
"B":{"name":"YYYYYY", "id":"YYYYYY"},
"C":{"name":"YYYYYY", "id":"YYYYYY"},
"D":[
{"name":"YYYYYY", "id":"YYYYYY"},
{"name":"YYYYYY", "id":"YYYYYY"}
]
},
{
"A":{"name":"ZZZZZZ", "id":"ZZZZZZ"},
"B":{"name":"ZZZZZZ", "id":"ZZZZZZ"},
"C":{"name":"ZZZZZZ", "id":"ZZZZZZ"},
"D":[
{"name":"ZZZZZZ", "id":"ZZZZZZ"},
{"name":"ZZZZZZ", "id":"ZZZZZZ"}
]
}
]
使用字符串接收,强转成实体类
controller方法(当前版本适合JDK1.8以上版本)
@RequestMapping(value = "save")
@ResponseBody
public JSONObject save(HttpServletRequest request) {
//获取json
String paramJson = request.getParameter("paramJson");
//转成就list
List<ParentEntity> lists = JSON.parseArray(paramJson, ParentEntity.class);
//具体业务
XXXXX
}
controller方法(当前版本适合JDK1.8以下版本)
@RequestMapping(value = "save")
@ResponseBody
public JSONObject save(HttpServletRequest request) {
//获取json
String paramJson = request.getParameter("paramJson");
//转成就list
JSONArray arr = JSONArray.parseArray(paramJson);
List<ParentEntity> lists = new ArrayList<ParentEntity>();
for (int i = 0; i < arr.size(); i++) {
ParentEntityd = JSONObject.parseObject(arr.getString(i),ParentEntity.class);
lists.add(d);
}
//具体业务
XXXXX
}
实体类ParentEntity
public class ParentEntity {
private ChildEntity A;
private ChildEntity B;
private ChildEntity C;
private List<ChildEntity> D;
public ChildEntity getA() {
return A;
}
public void setA(ChildEntity a) {
A = a;
}
public ChildEntity getB() {
return B;
}
public void setB(ChildEntity b) {
B = b;
}
public ChildEntity getC() {
return C;
}
public void setC(ChildEntity c) {
C = c;
}
public List<ChildEntity> getD() {
return D;
}
public void setD(List<ChildEntity> d) {
D = d;
}
}
实体类ChildEntity
public class ChildEntity {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}