SpringMVC之返回JSON的三種方式
一、方法上加注解@ResponseBody
需求
使用 springmvc 提供一個接口,以 json 格式輸出用戶列表。
step1:maven 配置引入 jackjson
jackjson 用于將 java 對象轉(zhuǎn)換為 json 格式的字符串,也可以將 json 格式的字符串轉(zhuǎn)換為 java 對象
我們的接口需要將 java 對象轉(zhuǎn)換為 json 格式的字符串輸出到客戶端,所以我們需要用到這個包。
<dependency>
<groupId>com.fasterxml.jackson.core<groupId>
<artifactId>jackson-core<artifactId>
<version>2.11.4<version>
<dependency>
<dependency>
<groupId>com.fasterxml.jackson.core<groupId>
<artifactId>jackson-databind<artifactId>
<version>2.11.4<version>
<dependency>step2:springmvc 配置文件中添加注解驅(qū)動
<mvc:annotation-driven/>
添加了這段代碼之后,springmvc 就被賦予了將 java 對象轉(zhuǎn)換為 json 格式字符串輸出到客戶端的能力。
step3:處理器的方法上添加@ResponseBody 注解
如下代碼,我們希望 list()方法用于向客戶端以 json 格式輸出用戶列表。
此時只需要在這個方法上面添加一個@ResponseBody注解,SpringMVC 發(fā)現(xiàn)這個方法上有@ResponseBody這個注解,并且方法返回值是一個普通的 java 對象的時候,會將方法的返回值使用 jackson 轉(zhuǎn)換為 json 格式的字符串,然后輸出到客戶端。
@Controller
public class UserController {
/**
* 用戶列表(用戶id->用戶信息)
*/
Map userDtoMap = new ConcurrentHashMap<>();
{
userDtoMap.put(1L, new UserDto(1L, "路人", 30));
userDtoMap.put(2L, new UserDto(2L, "張三", 20));
userDtoMap.put(3L, new UserDto(3L, "李四", 18));
}
@GetMapping("/user/list.do")
@ResponseBody
public Collection list() {
return this.userDtoMap.values();
}
}驗證效果
谷歌瀏覽器中訪問下這個接口
二、Controller 上添加注解ResponseBody
當(dāng)我們 controller 中方法很多的時候,且所有方法都要求返回 json 格式的數(shù)據(jù)的時候,如果按照方式 1,我們需要在每個方法上都要添加@ResponseBody注解,此時有更簡單的方法,將所有方法上的@ResponseBody注解都去掉,然后在 Controller 上加上@ResponseBody就可以了。
比如下面這段代碼,我們可以將 2 個方法上面的@ResponseBody干掉,然后在類上添加@ResponseBody注解就可以了。
@Controller
public class UserController {
Map userDtoMap = new ConcurrentHashMap<>();
{
userDtoMap.put(1L, new UserDto(1L, "路人", 30));
userDtoMap.put(2L, new UserDto(2L, "張三", 20));
userDtoMap.put(3L, new UserDto(3L, "李四", 18));
}
@GetMapping("/user/list.do")
@ResponseBody
public Collection list() {
return this.userDtoMap.values();
}
@GetMapping("/user/{id}.do")
@ResponseBody
public UserDto user(@PathVariable("id") Long id) {
return this.userDtoMap.get(id);
}
}調(diào)整之后如下
@Controller
@ResponseBody
public class UserController {
Map userDtoMap = new ConcurrentHashMap<>();
{
userDtoMap.put(1L, new UserDto(1L, "路人", 30));
userDtoMap.put(2L, new UserDto(2L, "張三", 20));
userDtoMap.put(3L, new UserDto(3L, "李四", 18));
}
@GetMapping("/user/list.do")
public Collection list() {
return this.userDtoMap.values();
}
@GetMapping("/user/{id}.do")
public UserDto user(@PathVariable("id") Long id) {
return this.userDtoMap.get(id);
}
}三、Controllers 上使用@RestController
我們回頭再看下上面代碼,UserController 上有 2 個注解@Controller和@ResponseBody,而 SpringMVC 提供了一個更好的注解@RestController,相當(dāng)于這 2 個注解的合體,所以可以用來替換這 2 個注解。
四、總結(jié)
掌握@ResponseBody 的用法,用來返回 json 格式的數(shù)據(jù),注意需要在 springmvc 配置文件中添加注解驅(qū)動的配置,否則調(diào)用會報錯
<mvc:annotation-driven/>
以上就是SpringMVC之返回JSON的三種方式的詳細(xì)內(nèi)容,更多關(guān)于SpringMVC 返回JSON的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java實體對象與Map之間的轉(zhuǎn)換工具類代碼實例
這篇文章主要介紹了java實體對象與Map之間的轉(zhuǎn)換工具類代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12
Java如何利用Easyexcel動態(tài)導(dǎo)出表頭列
這篇文章主要介紹了Java利用Easyexcel動態(tài)導(dǎo)出表頭列的實例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04
VSCode中開發(fā)JavaWeb項目的詳細(xì)過程(Maven+Tomcat+熱部署)
這篇文章主要介紹了VSCode中開發(fā)JavaWeb項目(Maven+Tomcat+熱部署),本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
如何使用Spring Validation優(yōu)雅地校驗參數(shù)
這篇文章主要介紹了如何使用Spring Validation優(yōu)雅地校驗參數(shù),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
Mybatis實體類屬性與數(shù)據(jù)庫不一致解決方案
這篇文章主要介紹了Mybatis實體類屬性與數(shù)據(jù)庫不一致解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10
SpringBoot實現(xiàn)前后端分離國際化的示例詳解
Springboot國際化可以幫助使用者在不同語言環(huán)境中構(gòu)建應(yīng)用程序,這樣應(yīng)用程序可以有效地適應(yīng)不同語言文化背景下的用戶需求。本文主要介紹了SpringBoot實現(xiàn)前后端分離國際化的方法,需要的可以參考一下2023-02-02
Spring Boot 定義系統(tǒng)啟動任務(wù)的多種方式
這篇文章主要介紹了Spring Boot 定義系統(tǒng)啟動任務(wù)的多種方式,看看你都會哪幾種 ,感興趣的朋友跟隨小編一起看看吧2019-04-04

