一、前言
關于什麼是json以及基本使用技巧,為什麼使用json等等,這裡不再重複,直接進入主題
注:服務端接收json資料還原為java對象,稱為反序列化,反之,将java對象作為響應轉換為json資料發回給用戶端,稱為序列化
二、導入json相關架構的依賴(比如jackson)
如果使用的是spring boot架構,導入spring boot相關依賴後,就存在相關依賴,無需重複,否則會報錯;
如果使用的是spring MVC架構,就需要手動導入相關依賴(比如Jackson),直接上代碼,添加到pom檔案中
<!-- jackson依賴 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.0</version>
</dependency>
二、響應json資料
在spring架構中,controller方法正常寫,如果需要響應json,增加@ResponseBody注解,表示目前return為資料不是視圖,如果目前controller層都需添加@ResponseBody,則可以在類名前添加@RestController 注解(@ResponseBody和@Controller合體)
三、在接受json對應的輸入參數前,加上@RequestBody注解
此處需注意,别把@RequestBody和@ResponseBody放錯地方,觀察源代碼可知,@RequestBody隻能添加在參數前,而@ResponseBody添加在類和方法前
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISM9AnYldnJwAzN9c3Pn5GcuQ0MlQ0MlcnW1JkbMVTWq1ENBpWT5VkaOhHMD1EMFR1T4NGROhXRU9EeJRUT1UERNlHMT1kMVpmT1UFVNZXSE1UNFRUT5hzUNJTVq5UNVRVT2NmMiNnSywEd5ITW110MaZHetlVdO1GT0UERNl3YXJGc5kHT20ESjBjUIF2Lc12bj5SYphXa5VWen5WY35iclN3Ztl2Lc9CX6MHc0RHaiojIsJye.png)
四、測試代碼
import com.jeat.clinic.controller.OVmodel.BookType;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
/**
* @author
* @class JsonTest
* @Abstract
* @date 2019/02/19
*/
@RestController
public class JsonTest {
/**
* 以實體類接收
* @param bookType
* @param request
* @return
* {"id":12,"typeName":"類型1"}
*/
@RequestMapping(value="acceptJsonByEntity",method = RequestMethod.POST)
public BookType acceptJsonByEntity(@RequestBody BookType bookType, HttpServletRequest request){
System.out.println("目前http請求方式為:"+request.getMethod());
System.out.println(bookType);
return bookType;
}
/**
* 以map方式接收
* @param paramsMap
* @param request
* @return
*/
@RequestMapping(value="acceptJsonByMap")
public Map<String,Object> acceptJsonByMap(@RequestBody Map<String,Object> paramsMap, HttpServletRequest request){
System.out.println("目前http請求方式為:"+request.getMethod());
System.out.println(paramsMap);
return paramsMap;
}
/**
* 以list方式接收(以json數組形式傳遞)
* @param bookTypeList
* @param request
* @return
*/
@RequestMapping(value="acceptJsonByList")
public List<BookType> acceptJsonByList(@RequestBody List<BookType> bookTypeList, HttpServletRequest request){
System.out.println("目前http請求方式為:"+request.getMethod());
System.out.println(bookTypeList);
return bookTypeList;
}
/**
* 以單獨屬性形式接收
* @param id
* @param name
* @return
*/
@RequestMapping("acceptJsonBySingleParam")
public MultiValueMap acceptJsonByRequestParam(@RequestBody MultiValueMap params
/* @RequestBody int userId,
@RequestBody String userName*/
) {
System.out.println(params.get("userId")+","+params.get("userName"));
return params;
}
}
五、測試
測試我們采用火狐浏覽器插件RESTClient,不會的找度娘
1、傳輸實體(類)
響應結果:
用戶端結果:
2、以map方式接收
響應結果:
用戶端結果:
3、以list方式接收(以json數組形式傳遞)
響應結果:
用戶端結果: