SpringBoot接收前端的json参数并解析
这篇⽂章主要讲述Springboot如何处理前端发过来的json数据并对其进⾏解析,提取我们想要的内容。⾸先声明⼀下我们的⼏个java类如下:
//以下类中属性的get⽅法和set⽅法均省略
public class Task {
private Integer taskId;
private Integer missionId;
private Integer pubUserId;
private Integer accUserId;
private Integer taskStatus; // 有哪些status,分别对应哪些数字
private String finishTime;
private Integer taskType;
}
public class Question {
springboot是啥
private int questionId;
private int questionType;
private String question;
private String answer;
private int choiceNum; // ?
private String choiceStr; //这个变量是⼲啥的?
private int questionareId;
}
public class Questionare {
private Integer questionareId;
private Integer questionNum;
private Integer taskId;
@Autowired
private ArrayList<Question> questions;
}
⾸先我们来讲⼀下第⼀种⽐较简单的情况:发过来的json参数的键值对与我们声明的某个类的属性是刚好对应的,⽐如:
{
"taskId": 0,
"MissionId": 0,
"pubUserId": 0,
"accUserId": 0,
"taskStatus": 0,
"finishTime": "string",
"taskType": 0
}
不难发现,这个Json的键值对和Task类的属性是⼀⼀对应的。此时我们可以通过使⽤@RequestBody很简单的将前端发过来的Json⽂件直接映射为task对象,代码如下:
public void teaching(@RequestBody Task task){
// task对象的属性取值即为json参数⾥对应键的取值
}
第⼆种情况:发过来的json参数是多个类的嵌套,不能对应任何⼀个数据类,⽐如:
{
"task": {
"taskId": 0,
"MissionId": 0,
"pubUserId": 0,
"accUserId": 0,
"taskStatus": 0,
"finishTime": "string",
"taskType": 0
},
"questionare": {
"questionareId": 0,
"questionNum": 0,
"taskId": 0,
"quesitons": [
{
"questionId": 0,
"questionType": 0,
"question": "string",
"answer": "string",
"choiceNum": 0,
"choiceStr": "string",
"questionareId": 0
}
]
}
}
这种情况下,我们不能直接将json参数转化为数据对象,此时引⼊阿⾥巴巴的fastjson库来解析,步骤如下:
1. l添加dependency,代码如下:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.57</version>
</dependency>
2. 注意上⾯的版本号是可以改的;
使⽤JSONObject接收json参数,代码如下:
public Object create_questionare_task(@RequestBody JSONObject param){
//使⽤JSONOject接收整个json参数,放在param变量中
}
从param中分别获取各个数据对象
由2,param是⼀个JSONOject对象,我们想要从中提取出各个数据类对象,⾸先需要从中先获取到各个类的JSONObject对象,再将其转化为java对象,以task为例,代码如下:
JSONObject task_json = JSONObject("task");
Task task = (JavaObject(task_json,Task.class);
这样我们就顺利地得到了task对象。但是在上⾯这个例⼦中,最⿇烦的是question对象的获取,因为它还嵌套在questionare对象的questions数组⾥⾯。为了获得question对象,我们⾸先要获取questionare
的JSONObject对象,再从此对象⾥获取questions的json数据,因为questions是⼀个数组,所以我们不能将其转化为JSONObject对象,应该将其转化为JSONArray对象,然后遍历JSONArray对象,取出其中的question对象,代码如下:
JSONObject questionare_json = JSONObject("questionare");
JSONArray questions_json = JSONArray("questions");
for(int i = 0; i < questions_json.size(); i++){
JSONObject question_json = (JSONObject)JSONObject(i); //这⾥不能是get(i),get(i)只会得到键值对
Question question = (JavaObject(question_json,Question.class);
}
这样我们就顺利取出我们要的question对象啦

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。