解讀@ResponseBody與@RequestBody注解的用法
@ResponseBody與@RequestBody注解用法
記錄一下這兩個(gè)注解最基本的用法,作為復(fù)習(xí)
@ResponseBody
- 作用:
@ResponseBody注解用于將Controller的方法返回的對(duì)象,通過(guò)springmvc提供的HttpMessageConverter
接口轉(zhuǎn)換為指定格式的數(shù)據(jù)如:json,xml等,通過(guò)Response響應(yīng)給客戶(hù)端。
@RequestBody
- 作用:
@RequestBody注解用于讀取http請(qǐng)求的內(nèi)容(字符串),通過(guò)springmvc提供的HttpMessageConverter接口將讀到的內(nèi)容(json數(shù)據(jù))轉(zhuǎn)換為java對(duì)象并綁定到Controller方法的參數(shù)上。
什么是HttpMessageConverter
作用:負(fù)責(zé)將請(qǐng)求信息轉(zhuǎn)換為一個(gè)對(duì)象(類(lèi)型為 T),將對(duì)象(類(lèi)型為 T)輸出為響應(yīng)信息。
代碼測(cè)試
(1)搭建SpringMVC的web開(kāi)發(fā)環(huán)境(可以參照我上一篇博客純注解搭建springmvc環(huán)境)
注意:要使用這兩個(gè)注解,就一定要有jackson的相關(guān)jar包
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.8</version> </dependency>
導(dǎo)入了jar包之后,如果配置了<mvc:annotation-driven />
或者使用了注解@EnableWebMvc
,那么容器在啟動(dòng)的時(shí)候就會(huì)自動(dòng)裝載json的HttpMessageConverter
如下圖所示:
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2019/6/14 Time: 18:48 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <script type="text/javascript" src="/js/jquery-1.5.1.min.js"></script> <title>Title</title> <script> $(function () { $("button[name='butt1']").click(function () { $.ajax({ url: "/save", data:JSON.stringify({"userName":"張三","age":"18"}), type: "POST", success: function (data) { alert(data); }, contentType: "application/json;charset=utf-8" }); }); }) </script> </head> <body> <button name="butt1">提價(jià)post</button> </body> </html>
點(diǎn)擊提交,發(fā)送post請(qǐng)求,提價(jià)json字符串?dāng)?shù)據(jù),需要指定contentType: "application/json;charset=utf-8"
不然會(huì)報(bào)415
錯(cuò)誤
這里說(shuō)明一下json字符串和json對(duì)象時(shí)兩個(gè)不同的概念:
var user ={“userName”:“張三”,“age”:“18”} 這里user 是一個(gè)json對(duì)象,類(lèi)型是object 可以通過(guò)user.name和user.age取到對(duì)應(yīng)的值 var user1= ‘{“userName”:“張三”,“age”:“18”}' 這里user1 就是一個(gè)字符串,是符合{k:v,k:v}這種json格式的字符串而已,不能通過(guò)上面那種方式取值。
可以通過(guò)一定的方法相互轉(zhuǎn)換:json對(duì)象轉(zhuǎn)json字符串 1、可以直接單引號(hào) 2、通過(guò)JSON.stringify(xxx)
json字符串轉(zhuǎn)json對(duì)象:JSON.parse(xxxx)
controller層代碼
@PostMapping("/save") @ResponseBody public User save(@RequestBody User user){ //將前臺(tái)傳過(guò)來(lái)的數(shù)據(jù) 以json的格式相應(yīng)回瀏覽器 return user ; } }
- 開(kāi)始測(cè)試:
- 打開(kāi)控制臺(tái):點(diǎn)擊提價(jià)之后
可以發(fā)現(xiàn)請(qǐng)求體就是data的內(nèi)容信息。
contentType
也就是設(shè)置的application/json;charset=utf-8
,然后再查看一下相應(yīng)信息
user對(duì)象特定的json格式,響應(yīng)給了瀏覽器。
總結(jié)
我們前臺(tái)請(qǐng)求過(guò)去的json字符串,在使用@RequestBody注解后 被HttpMessageConverter,轉(zhuǎn)換成對(duì)應(yīng)的java對(duì)象,然后我們?cè)谟聾ResponseBody注解,將java對(duì)象 以特定的格式(通常都是json)相應(yīng)給瀏覽器。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis如何解決sql中l(wèi)ike通配符模糊匹配問(wèn)題
這篇文章主要介紹了Mybatis如何解決sql中l(wèi)ike通配符模糊匹配問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01java如何在項(xiàng)目中實(shí)現(xiàn)excel導(dǎo)入導(dǎo)出功能
這篇文章主要介紹了java如何在項(xiàng)目中實(shí)現(xiàn)excel導(dǎo)入導(dǎo)出功能的相關(guān)資料,EasyExcel是一個(gè)基于Apache?POI開(kāi)發(fā)的開(kāi)源Java庫(kù),用于簡(jiǎn)化Excel文件的讀寫(xiě)操作,文中將用法介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10Java令牌Token登錄與退出的實(shí)現(xiàn)
這篇文章主要介紹了Java令牌Token登錄與退出的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05mybatis的動(dòng)態(tài)SQL以及連接池詳解
這篇文章主要介紹了mybatis的動(dòng)態(tài)SQL以及連接池詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02springboot接收json數(shù)據(jù)時(shí),接收到空值問(wèn)題
這篇文章主要介紹了springboot接收json數(shù)據(jù)時(shí),接收到空值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05java.util.concurrent.ExecutionException 問(wèn)題解決方法
這篇文章主要介紹了java.util.concurrent.ExecutionException 問(wèn)題解決方法的相關(guān)資料,需要的朋友可以參考下2016-11-11IDEA maven依賴(lài)錯(cuò)誤中包下面紅色波浪線
這篇文章主要介紹了IDEA maven依賴(lài)錯(cuò)誤中包下面紅色波浪線,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08