解讀@ResponseBody與@RequestBody注解的用法
@ResponseBody與@RequestBody注解用法
記錄一下這兩個(gè)注解最基本的用法,作為復(fù)習(xí)
@ResponseBody
- 作用:
@ResponseBody注解用于將Controller的方法返回的對(duì)象,通過(guò)springmvc提供的HttpMessageConverter接口轉(zhuǎn)換為指定格式的數(shù)據(jù)如:json,xml等,通過(guò)Response響應(yīng)給客戶端。
@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ì)象(類型為 T),將對(duì)象(類型為 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ì)象,類型是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)文章
深入淺析springsecurity入門登錄授權(quán)
SpringSecurity為我們提供了基于注解的權(quán)限控制方案,這也是我們項(xiàng)目中主要采用的方式,我們可以使用注解去指定訪問(wèn)對(duì)應(yīng)的資源所需的權(quán)限,這篇文章主要介紹了springsecurity入門登錄授權(quán),需要的朋友可以參考下2024-05-05
Java的方法和this關(guān)鍵字如何理解與應(yīng)用
Java語(yǔ)言中的“方法”(Method)在其他語(yǔ)言當(dāng)中也可能被稱為“函數(shù)”(Function)。對(duì)于一些復(fù)雜的代碼邏輯,如果希望重復(fù)使用這些代碼,并且做到“隨時(shí)任意使用”,那么就可以將這些代碼放在一個(gè)大括號(hào){}當(dāng)中,并且起一個(gè)名字。使用代碼的時(shí)候,直接找到名字調(diào)用即可2021-10-10
Java Email郵件發(fā)送簡(jiǎn)單實(shí)現(xiàn)介紹
電子郵件從用戶電腦的郵件軟件,例如Outlook,發(fā)送到郵件服務(wù)器上,可能經(jīng)過(guò)若干個(gè)郵件服務(wù)器的中轉(zhuǎn),最終到達(dá)對(duì)方郵件服務(wù)器上,收件方就可以用軟件接收郵件2022-11-11
SpringCloud Gateway鑒權(quán)和跨域解決方案
網(wǎng)關(guān)是介于客戶端和服務(wù)器端之間的中間層,所有的外部請(qǐng)求都會(huì)先經(jīng)過(guò) 網(wǎng)關(guān)這一層,也就是說(shuō),API 的實(shí)現(xiàn)方面更多的考慮業(yè)務(wù)邏輯,而安全、性能、監(jiān)控可以交由 網(wǎng)關(guān)來(lái)做,這樣既提高業(yè)務(wù)靈活性又不缺安全性,本文給大家介紹SpringCloud Gateway鑒權(quán)和跨域解決方案,一起看看吧2023-11-11
Springboot整合mqtt實(shí)現(xiàn)軟硬件通信的示例代碼
本文介紹了如何使用Spring Boot整合MQTT協(xié)議,實(shí)現(xiàn)物聯(lián)網(wǎng)軟硬件通信, MQTT是一種輕量級(jí)的消息隊(duì)列遙測(cè)傳輸協(xié)議,適用于物聯(lián)網(wǎng)設(shè)備通信和遠(yuǎn)程監(jiān)控,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2025-12-12
Java后臺(tái)Controller實(shí)現(xiàn)文件下載操作
這篇文章主要介紹了Java后臺(tái)Controller實(shí)現(xiàn)文件下載操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10
JAVA實(shí)現(xiàn)JSON后端向前端傳遞數(shù)據(jù)
本篇文章主要介紹了JAVA實(shí)現(xiàn)JSON后端向前端傳遞數(shù)據(jù),這里整理了詳細(xì)的代碼,具有一定的參考價(jià)值,有需要的小伙伴可以參考下。2017-03-03
一文教你掌握J(rèn)ava如何實(shí)現(xiàn)判空
實(shí)際項(xiàng)目中我們會(huì)有很多地方需要判空校驗(yàn),如果不做判空校驗(yàn)則可能產(chǎn)生NullPointerException異常。所以本文小編為大家整理了Java中幾個(gè)常見(jiàn)的判空方法,希望對(duì)大家有所幫助2023-04-04

