java get post 注解,GET/POST接收或發送數據的問題

在文章開始,先來回憶一下GET、POST這兩種請求方式的區別。

?

Http定義了與服務器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL全稱是資源描述符,我們可以這樣認為:一個URL地址,它用于描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應著對這個資源的查,改,增,刪4個操作。到這里,大家應該有個大概的了解了,GET一般用于獲取/查詢資源信息,而POST一般用于更新資源信息。

?

0、GET請求,請求的數據會附加在URL之后,以?分割URL和傳輸數據,多個參數用&連接。URL的編碼格式采用的是ASCII編碼,而不是uniclde,即是說所有的非ASCII字符都要編碼之后再傳輸。

POST請求:POST請求會把請求的數據放置在HTTP請求包的包體中。上面的item=bandsaw就是實際的傳輸數據。

因此,GET請求的數據會暴露在地址欄中,而POST請求則不會。

1、傳輸數據的大小

在HTTP規范中,沒有對URL的長度和傳輸的數據大小進行限制。但是在實際開發過程中,對于GET,特定的瀏覽器和服務器對URL的長度有限制。因此,在使用GET請求時,傳輸數據會受到URL長度的限制。

對于POST,由于不是URL傳值,理論上是不會受限制的,但是實際上各個服務器會規定對POST提交數據大小進行限制,Apache、IIS都有各自的配置。

2、安全性

POST的安全性比GET的高。這里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全僅僅是不修改服務器的數據。比如,在進行登錄操作,通過GET請求,用戶名和密碼都會暴露再URL上,因為登錄頁面有可能被瀏覽器緩存以及其他人查看瀏覽器的歷史記錄的原因,此時的用戶名和密碼就很容易被他人拿到了。除此之外,GET請求提交的數據還可能會造成Cross-site request frogery攻擊

3、HTTP中的GET,POST,SOAP協議都是在HTTP上運行的

以上內容摘自?哪?如有雷同,不關我事。

以下內容是我在開發中對遇到的問題做的總結,能力一般,水平有限,如有錯誤,敬請指出。

0. 發出POST請求,獲取某接口中的數據。

需求簡述:?從指定的接口中獲取到數據并存儲,POST請求頭的header中需要加接口發布方提供的串碼,否則POST請求會被攔截,導致獲取不到數據。

核心代碼如下:一般在service層做處理

**使用IDEA,SpringBoot微服務架構,MongoDB數據庫。**

public List getDataFromURL(){

String result = "";//用來接收接口中的數據。

String url = "獲取數據的接口URL寫在這里";

/*

*此處引入了commons-httpclient的jar包,jar包依賴如下:

commons-httpclient

commons-httpclient

3.1

*/

HttpClient httpClient = new HttpClient();

PostMethod postMethod = new PostMethod(url);

try {

//設置header的名稱和值。

postMethod.setRequestHeader("headerKey","headerValue");

int statusCode = 0;//設置請求結果的狀態值,一般為200、404、500

try {

statusCode = httpClient.executeMethod(postMethod);

}catch (Exception e ){

e.printStackTrace();

}

if(statusCode == HttpStatus.SC_OK){

try {

result = postMethod.getResponseBodyAsString();

}catch (Exception e){

e.printStackTrace();

}

}else{

System.out.println("請求有誤,錯誤代碼:"+statusCode);

}

}catch (Exception e){

System.out.println(e.getMessage());

}finally {

//關閉HTTP連接,這兩行代碼一定要有。

postMethod.releaseConnection();

httpClient.getHttpConnectionManager().closeIdleConnections(0);

}

JSONObject jsonObject = new JSONObject(result);

JSONArray jsonArray = new JSONArray();

try {

//我需要的是接口中的“data”值,具體get什么看自己需求。

jsonArray = jsonObject.get("data");

}catch (Exception e){

System.out.println("獲取不到data,檢查串碼是否過期");

}

List list = new ArrayList<>();

for (int i = 0; i < jsonArray.length();i++){

Document document = new Document();

//這個截字符串的方法不錯。記住傳參一般都是“包頭不包尾”

String time = ((JSONObject)jsonArray.get(i)).getString("time").replace("T"," ").substring(0,19);

//獲取JSON數組中的數據,按需求數據格式轉換入庫數據的格式。

//這里就寫上你對接口中數據的處理吧,想要什么get什么,之后在return它。

}

return list;

}

1. 發出POST請求,將數據發送至某接口

需求簡述?: 某模塊發布出一個接口,規定了傳數據的格式,我需要把數據庫中的數據查出來,組合成為對方需求的格式并發出。

核心代碼如下:一般在service層做處理,查詢數據的過程不展示

**IDEA、SpringBoot、MongoDB**

//如果項目中多次使用到發數據至某接口的方法,可將此方法作為工具類,設置合理的參數列表即可

public class SendDataToURL {

//參數列表:url--發送數據的目標地址。param--發送的內容,格式依據自身需求

public static Boolean sendPost(String url, String param){

OutputStreamWriter out = null;

BufferedReader in = null;

String result = "";

try {

URL realUrl = new URL(url);

HttpURLConnection conn = null;

conn = (HttpURLConnection) realUrl.openConnection();

// 發送POST請求必須設置如下兩行

conn.setDoOutput(true);

conn.setDoInput(true);

// 設置請求方式為POST方法

conn.setRequestMethod("POST");

// 設置通用的請求屬性

conn.setRequestProperty("accept", "*/*");

conn.setRequestProperty("connection", "Keep-Alive");

conn.setRequestProperty("user-agent",

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

//此處可以設置請求參數,若接口的header中有串碼可以在此設置。

conn.setRequestProperty("headerKey", "headerValue");

conn.connect();

// 獲取URLConnection對象對應的輸出流

out = new OutputStreamWriter(conn.getOutputStream(),"UTF-8");

// 發送請求參數,發送的數據在此處發送。

out.write(param);

// flush輸出流的緩沖

out.flush();

// 定義BufferedReader輸入流來讀取URL的響應

in = new BufferedReader(

new InputStreamReader(conn.getInputStream(), "UTF-8"));

String line ;

while ((line = in.readLine()) != null) {

result += line;

}

} catch (Exception e) {

System.out.println("發送 POST 請求出現異常!"+e);

e.printStackTrace();

}

//使用finally塊來關閉輸出流、輸入流

finally{

try{

if(out!=null){

out.close();

}

if(in!=null){

in.close();

}

}

catch(IOException ex){

ex.printStackTrace();

}

}

//result為請求結束后返回的response,可以讓接口發布方設置數據是否發送成功的標識,具體怎么返回還需要你們自己協商。

if(result.contains("SUCCESS")){

return true;

}else{

return false;

}

}

2.由頁面發起GET請求,之后POST數據至指定接口,接口方收到數據后返回響應信息,由service層做處理,再由controller返回響應信息至GET請求發起方。

需求簡述?: 頁面中的button發起了GET請求,controller中調用相關的處理方法,將數據以POST的形式發送至某接口中,接口發布方收到數據之后,返回響應信息(其中包括對接收狀態的標識),由返回信息判斷是否成功接收數據,之后再返回響應信息至GET請求發起方,展示是否成功發送數據。

controller層發布接口,供頁面發起GET請求用,返回值為String(也可為其他,視自身情況定)。

**IDEA、SpringBoot、MongoDB、RESTful**

@RestController//此注解包含了@ResponseBody和@Controller注解。

@RequestMapping(value = "/sendDataToURL")

public class TestController {

@RequestMapping(value = "/test" , method = RequestMethod.GET)

//使用@RequestParam注解獲取GET請求發起方request中的信息。

//如:http://localhost:8080/sendDataToURL/test?id=test

public String testSendData(@RequestParam("id") String id){

Boolean flag = 發送數據的方法,返回值可定義為boolean,可做響應信息的標識

logger.info(flag ? "成功" : "失敗";//打上日志,方便查看

return flag ? "true" : "false";

}

}

**在service層做對數據發送的處理,方法參照本文第1部分**

本文中還涉及到對JSON對象、JSON數組、Document對象、List集合等問題的處理,都屬于基本操作,注意字段取值時的拼寫問題即可,不做詳述。

本文系投稿作品,點擊閱讀原文即可閱讀原作者的博客,歡迎大家投稿!

68bfdf3476ef0c6acd06a67b23f67ce1.gif

始發于微信公眾號: Java知音

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540965.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540965.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540965.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mybatis中sql語句傳入多個參數方法

1 使用map <select id"selectRole" parameterType"map" resultType"RoleMap">SELECT id, roleName, noteFROM roleWHERE roleName LIKE Concat(%,#{roleName},%)and note like Concat(%,#{note},%)</select> 在接口中如下定義 List&…

kotlin半生對象_Kotlin程序| 隨播對象特征

kotlin半生對象伴侶對象 (Companion object) If you need a function or a property to be tied to a class rather than to instances of it (similar to static in java), you can declare it inside a companion object: 如果需要將函數或屬性綁定到類而不是實例(類似于java…

mysql安裝注意步驟,mysql安裝步驟

mysql安裝步驟1、在官網下載對應的壓縮文件&#xff0c;放到本地文件夾下&#xff0c;解壓縮。2、配置Path環境變量&#xff1a;新增mysql的bin文件夾路徑&#xff0c;C:\software\mysql-8.0.23-winx64\bin。3、在mysql根目錄下新增my.ini配置文件。內容如下&#xff0c;basedi…

maven插件介紹之tomcat7-maven-plugin

tomcat7-maven-plugin插件的pom.xml依賴為&#xff1a; <dependency><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version> </dependency>一&#xff1a;直接執行…

在Python中模擬do-while循環

Python as a language doesnt support the do-while loop. However, we can have a workaround to emulate the do-while loop. Python作為一種語言不支持do-while循環。 但是&#xff0c;我們可以采用一種變通方法來模擬do-while循環 。 The syntax for do-while is as follo…

織夢cms生成首頁html的php文件,織夢DedeCMS定時自動生成首頁HTML的實現方法

只需要制作一個文件然后在首頁模板添加一句代碼就可以實現讓織夢DedeCMS自動生成首頁html&#xff0c;具體方法如下&#xff1a;第一步、需要在首頁調用隨機文章&#xff0c;這樣每次自動更新才會有更新的效果&#xff0c;隨機文章調用標簽如下&#xff1a;{dede:arclist sortr…

Linux下安裝Flume

1 下載Flume Welcome to Apache Flume — Apache Flume 下載1.9.0版本 2 上傳服務器并解壓安裝 3 刪除lib目錄下的guava-11.0.2.jar &#xff08;如同服務器安裝了hadoop&#xff0c;則刪除&#xff0c;如沒有安裝hadoop則保留這個文件&#xff0c;否則無法啟動flume&#…

Apple新發布的APFS文件系統對用戶意味著什么

2016年WWDC大會上&#xff0c;Apple除了公布watchOS、tvOS、macOS以及iOS等一系列系統和軟件更新外&#xff0c;還公布了一個名為APFS&#xff08;Apple File System&#xff09;的文件系統。 這一全新文件系統專門針對閃存/SSD進行優化&#xff08;但依然可用于傳統機械硬盤&a…

chown –r mysql:mysql,mysql部署,操作及異常處理

1、將mysql-5.1.50-linux-x86_64-glibc23.tar.gz移至/usr/local/目錄下&#xff0c;并改名為mysql增加mysql組#groupadd mysql建mysql用戶&#xff0c;并加入到mysql組中#useradd –g mysql mysql源碼包解壓#tar mysql-5.1.50-linux-x86_64-glibc23.tar.gz將解壓后的源碼包放置…

光伏等新能源信用風險事件頻繁爆發

2016年以來&#xff0c;伴隨著供給側改革相關政策陸續出臺和落地&#xff0c;去產能、去杠桿誘發信用風險事件陸續爆出。而在“11天威NTN1”、“15云峰PPN001”及“15云峰PPN003”等信用風險事件上&#xff0c;大股東“棄車保帥”行為再現&#xff0c;令本就失去造血能力的企業…

ruby array_Ruby中帶有示例的Array.zip()方法

ruby arrayArray.zip()方法 (Array.zip() Method) In this article, we will study about Array.zip() Method. You all must be thinking the method must be doing something which is related to zipping values of the Array instance. It is not as simple as it looks. W…

matlab中迪杰斯特拉算法,dijkstra算法(迪杰斯特拉算法)

單源最短路徑算法——Dijkstra算法&lpar;迪杰斯特拉算法&rpar;一 綜述 Dijkstra算法(迪杰斯特拉算法)主要是用于求解有向圖中單源最短路徑問題.其本質是基于貪心策略的(具體見下文).其基本原理如下: (1)初始化:集合vertex_set初始為{sourc ...Dijkstra【迪杰斯特拉算法…

關于概率算法的問題,不知道邏輯錯在哪里,求debug

做個骰子成功幾率的分析&#xff0c;投n顆骰子&#xff0c;第一次投成功的幾率是a,然后投成功的骰子&#xff0c;需要再投1次&#xff0c;這次成功的幾率是b。第二次成功的骰子才算最終成功。 要分析出n顆骰子&#xff0c;最終成功0到n顆的概率。 我寫了個算法&#xff0c;求出…

tps 交易量_交易處理系統(TPS)

tps 交易量A transaction is a simple process that takes place during business operations. The transaction processing system (TPS) manages the business transactions of the client and therefore helps a companys operations. A TPS registers, as well as all of i…

matlab for循環不覆蓋,將輸出保存到文本文件而不覆蓋和打印矩陣中的N個條目[matlab]...

這是代碼&#xff1a;for i 1:4;fileID fopen(testdata.txt, at);fprintf(fileID, this is answer %d\n,i);fprintf(fileID, %5.3e\n, v{i});fclose(fileID);end在記事本中回答&#xff1a;this is answer 11.000e0001.000e0001.000e0001.000e0001.000e0001.000e0000.000e0001…

(轉)Redis研究(一)—簡介

http://blog.csdn.net/wtyvhreal/article/details/41855327 Redis是一個開源的高性能鍵值對數據庫。它通過提供多種鍵值數據類型來適應不同場景下的存儲需求&#xff0c;并借助許多高層級的接口使其可以勝任如緩存、隊列系統等不同的角色。 1.1歷史和發展 2008年&#xff0c;意…

c bitset get_Java BitSet get()方法與示例

c bitset getBitSet類的get()方法 (BitSet Class get() method) Syntax: 句法&#xff1a; public boolean get(int bit_in);public BitSet get(int st_in, int en_in);get() method is available in java.util package. get()方法在java.util包中可用。 get(int bit_in) meth…

有擾動的閉環傳遞函數 matlab,(d)閉環系統的誤差傳遞函數.PPT

(d)閉環系統的誤差傳遞函數3. 控制系統的方框圖模型 若已知控制系統的方框圖,使用MATLAB函數可實現方框圖轉換。 a).串聯 如圖所示G1(s)和G2(s)相串聯,在MATLAB中可用串聯函數series( )來求G1(s)G2(s),其調用格式為 [num,den]series(num1,den1,num2,den2) 其中&#xff1a; b)并…

CYQ.Data 輕量數據層之路 自定義MDataTable綁定續章(七)

本章起&#xff0c;將續章講解整框架當初的設計思路&#xff1a; 本章既為續章&#xff0c;說明我以前寫過&#xff0c;是的&#xff0c;以前我寫過內部整個MDataTable的構造&#xff0c;不過&#xff0c;當初匆匆寫完后&#xff0c; 最后一步的實現MDataTable綁定GridView/Dat…

php 文字超出畫布,input實現文字超出省略號(代碼示例)

本篇文章給大家帶來的內容是關于input實現文字超出省略號(代碼示例)&#xff0c;有一定的參考價值&#xff0c;有需要的朋友可以參考一下&#xff0c;希望對你有所幫助。input實現文字省略號功能普通元素實現文字超出寬度自動變成省略號非常簡單&#xff0c;給元素加個寬度&…