springboot使用requestBody来接收复杂的json数据串

#2020.3.9
#使用requestBody来接收复杂的json数据串。

上回提到“复选框怎么能一次接受多个值”
但是似乎没有找到答案。取而代之的是,使用table,将所有的数据罗列出来,然后利用jQuery,将需要的数据形成json数据串,发送给后台。
一、例如:jQuery的方法可以这样:

function get_table_data(){
			var src=$("tr.tdtrade");//选取所有带数据的行<tr>
			var result=[];
			var cnt=src.length;
			for(var i=0;i<cnt;i++){
				var tds=src[i].cells;
				if(tds.length>0){  //根据需要将数据插入,形成一个json对象。result.push({'pid':tds[0].innerHTML,'price':tds[2].innerHTML*100,'feature':tds[3].innerHTML,'discounts':tds[4].innerHTML,'cnt':tds[5].innerHTML});
				}
			}
			return result;//切记这个json对象要转换成json字符串才能识别。
		};
		var result = get_table_data();
		var des=JSON.stringify(result); ///转换为字符串。
二、数据通过ajax发送:
$.ajax({
	            type: "post",
	            dataType: "json",
	            url: "genTrade",
	            contentType: "application/json;charset=UTF-8",//指定消息请求类型
	            data: dattt,//将js对象转成json对象
	            success: function (data) {
	               console.log(data);
	            }
			});

三,使用requestBody来接受这些参数。
ps:需要要明确的是,requestBody只能接受json字符串!不接受json对象
默认是什么类型的JSON字符串都可以接收的。但是如果遇到bean的属性比较复杂或者和我这里一样,包含了collection属性的。就需要自己定义了。

1、首先:自己写一个类继承:这里由于是我的bean中包含了List,所以需要将json字符串转换为这个格式。
public class SubTradeDeserializer extends JsonDeserializer<Collection>

实现方法:

public Collection<ReqSubTrade> deserialize(JsonParser p, DeserializationContext ctxt) 
throws IOException, JsonProcessingException {
			lp.getText();///就是要转换的json数据。
			ObjectMapper mapper = new ObjectMapper();
			....
}

2、下面两种方法都可以:

//(1)种方法。
List<ReqSubTrade> list = mapper.readValue(p.getText(), 
new TypeReference<List<ReqSubTrade>>() {});// 这个方法也是可以的。
//(2)种方法
JavaType type = TypeFactory.defaultInstance().constructCollectionType(List.class, ReqSubTrade.class);
List<ReqSubTrade> list = mapper.readValue(p.getText(), type);

3、最后:在requestBody bean相应的setter方法上加上注解: 切忌。

@JsonDeserialize(using = SubTradeDeserializer.class)
public void setSubTrades(List<ReqSubTrade> subTrades) {
	this.subTrades = subTrades;
}

这样从前台发送json数据就可以正常转为指定的bean了。

发布了7 篇原创文章 · 获赞 6 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/wujin274/article/details/104960398