SpringMVC之返回JSON的三種方式
一、方法上加注解@ResponseBody
需求
使用 springmvc 提供一個(gè)接口,以 json 格式輸出用戶列表。
step1:maven 配置引入 jackjson
jackjson 用于將 java 對(duì)象轉(zhuǎn)換為 json 格式的字符串,也可以將 json 格式的字符串轉(zhuǎn)換為 java 對(duì)象
我們的接口需要將 java 對(duì)象轉(zhuǎn)換為 json 格式的字符串輸出到客戶端,所以我們需要用到這個(gè)包。
<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ū)動(dòng)
<mvc:annotation-driven/>
添加了這段代碼之后,springmvc 就被賦予了將 java 對(duì)象轉(zhuǎn)換為 json 格式字符串輸出到客戶端的能力。
step3:處理器的方法上添加@ResponseBody 注解
如下代碼,我們希望 list()方法用于向客戶端以 json 格式輸出用戶列表。
此時(shí)只需要在這個(gè)方法上面添加一個(gè)@ResponseBody
注解,SpringMVC 發(fā)現(xiàn)這個(gè)方法上有@ResponseBody
這個(gè)注解,并且方法返回值是一個(gè)普通的 java 對(duì)象的時(shí)候,會(huì)將方法的返回值使用 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(); } }
驗(yàn)證效果
谷歌瀏覽器中訪問下這個(gè)接口
二、Controller 上添加注解ResponseBody
當(dāng)我們 controller 中方法很多的時(shí)候,且所有方法都要求返回 json 格式的數(shù)據(jù)的時(shí)候,如果按照方式 1,我們需要在每個(gè)方法上都要添加@ResponseBody
注解,此時(shí)有更簡單的方法,將所有方法上的@ResponseBody
注解都去掉,然后在 Controller 上加上@ResponseBody
就可以了。
比如下面這段代碼,我們可以將 2 個(gè)方法上面的@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 個(gè)注解@Controller
和@ResponseBody
,而 SpringMVC 提供了一個(gè)更好的注解@RestController
,相當(dāng)于這 2 個(gè)注解的合體,所以可以用來替換這 2 個(gè)注解。
四、總結(jié)
掌握@ResponseBody
的用法,用來返回 json 格式的數(shù)據(jù),注意需要在 springmvc 配置文件中添加注解驅(qū)動(dòng)的配置,否則調(diào)用會(huì)報(bào)錯(cuò)
<mvc:annotation-driven/>
以上就是SpringMVC之返回JSON的三種方式的詳細(xì)內(nèi)容,更多關(guān)于SpringMVC 返回JSON的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript base64 與 File 之間的互轉(zhuǎn)(操作方法)
在JavaScript 中,可以使用 Blob 對(duì)象將 base64 字符串轉(zhuǎn)換為 File 對(duì)象,這篇文章主要介紹了JavaScript base64 與 File之間的互轉(zhuǎn),需要的朋友可以參考下2024-05-05SpringBoot Jpa 自定義查詢實(shí)現(xiàn)代碼詳解
這篇文章主要介紹了SpringBoot Jpa 自定義查詢實(shí)現(xiàn)代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02mybatis-generator-gui 工具使用(圖形化工具)
基于 mybatis generator 開發(fā)一款界面工具, 本工具可以使你非常容易及快速生成 Mybatis 的 Java POJO 文件及數(shù)據(jù)庫 Mapping 文件。本文重點(diǎn)給大家介紹mybatis-generator-gui 工具使用,感興趣的朋友一起看看吧2022-03-03Spring Boot配置動(dòng)態(tài)更新問題
這篇文章主要介紹了Spring Boot配置動(dòng)態(tài)更新問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Java基礎(chǔ)學(xué)習(xí)之實(shí)參和形參
這篇文章主要介紹了Java基礎(chǔ)學(xué)習(xí)之實(shí)參形參,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有一定的幫助,需要的朋友可以參考下2021-05-05