解讀@RequestBody的正確使用方法
本文主要研究的是關于@RequestBody的正確使用方法的相關內(nèi)容,具體如下。
最近在接收一個要離職同事的工作,接手的項目是用SpringBoot搭建的,其中看到了這樣的寫法:
@RequestMapping("doThis")
public String doThis(HttpServletRequest request,
@RequestParam("id") Long id, // 用戶ID
@RequestParam("back_url") String back_url, // 回調(diào)地址
@RequestBody TestEntity json_data // json數(shù)據(jù),對于java實體類
){//...
這個是一個請求映射方法,然后用瀏覽器輸入url:http://127.0.0.1:8080/test/doThis?id=1&back_url=url&json_data={"code":2,"message":"test"}
在這個方法中,使用@RequestParam獲取參數(shù),然后使用@RequestBody對json格式的參數(shù)轉(zhuǎn)換為Java類型
在運行的時候發(fā)現(xiàn)報錯:Required request body is missing
@RequestBody的使用需要加載MappingJackson2HttpMessageConverter,但是SpringBoot的官方文檔提到,這個是默認已經(jīng)加載的了,而且json字符串和javabean也沒有書寫的錯誤
因此考慮到應該是請求Content-Type的問題,因為使用瀏覽器輸入url的方式?jīng)]有辦法定義Content-Type,因此spring無法發(fā)現(xiàn)request body
為了證實這個想法,自己書寫一個請求類:
String add_url = "http://127.0.0.1:8080/test/doThis";
URL url = new URL(add_url);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Content-Type","application/json");
connection.connect();
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
JSONObject obj = new JSONObject();
obj.put("code", -1002);
obj.put("message", "msg");
out.writeBytes(obj.toString());
out.flush();
out.close();
請求還是失敗,經(jīng)過調(diào)試,發(fā)現(xiàn)需要去掉所有的@RequestParam注解才能成功
總結(jié)
1、@RequestBody需要把所有請求參數(shù)作為json解析,因此,不能包含key=value這樣的寫法在請求url中,所有的請求參數(shù)都是一個json
2、直接通過瀏覽器輸入url時,@RequestBody獲取不到json對象,需要用java編程或者基于ajax的方法請求,將Content-Type設置為application/json
以上就是本文關于解讀@RequestBody的正確使用方法的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關文章
java在linux系統(tǒng)下開機啟動無法使用sudo命令的原因及解決辦法
每次開機自動啟動的java進程,頁面上的關機按鈕都無法實現(xiàn)關機功能,但是此時如果以chb賬號通過ssh登錄該服務器,手動殺掉tomcat進程,然后再重新啟動tomcat,頁面上的關機按鈕就有效了2013-08-08
SpringBoot通過參數(shù)注解自動獲取當前用戶信息的方法
這篇文章主要介紹了SpringBoot通過參數(shù)注解自動獲取當前用戶信息的方法,文中使用HandlerMethodArgumentResolver 類來實現(xiàn)這個功能,并通過代碼示例講解的非常詳細,需要的朋友可以參考下2024-03-03
Java將集合List轉(zhuǎn)換成String字符串(或String轉(zhuǎn)換成List)詳解
今天在寫項目的時候遇到一個問題,就是要把得到的一個集合轉(zhuǎn)換成字符串,下面這篇文章主要給大家介紹了關于Java將集合List轉(zhuǎn)換成String字符串(或String轉(zhuǎn)換成List)的相關資料,需要的朋友可以參考下2023-06-06

