客户端与服务端json交互和json转成实体类的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cl11992/article/details/89022494

本文主要详细介绍了以下三个问题:

  1. 客户端如何把json传给服务端
  2. 客户端传给服务端的json如何转成实体类
  3. 客户端传给服务端的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方法

@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
}

 实体类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;
	}
	
}

猜你喜欢

转载自blog.csdn.net/cl11992/article/details/89022494
今日推荐