java 遠程調用url_使用Java的URL/HttpURLConnection進行遠程調用(POST請求)

利用Java的HttpURLConnection進行遠程url請求(調用遠程接口)

測試類:請求類型為json,以post方式請求,利用OutputStream寫入數據

實體類:public class User implementsSerializable {privateString name;privateString password;publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}publicString getPassword() {returnpassword;

}public voidsetPassword(String password) {this.password =password;

}

}-------@RunWith(SpringRunner.class)

@SpringBootTestpublic classSpringboot02ApplicationTests {

@AutowiredprivateUserService userService;

@Testpublic voidcontextLoads(){

User user= newUser();

user.setName("lisi");

user.setPassword("123");//調用遠程接口方法,獲取返回結果類型

String result =userService.idendifyUser(user);

System.out.println(result);

}

}---------@Servicepublic class UserServiceImpl implementsUserService {publicString idendifyUser(User user){//將對象轉換為json,然后發送;

String json =JSONObject.fromObject(user).toString();

String result= null;try{

result=UserRemoteVerify.doPost(json);

}catch(Exception e){

e.printStackTrace();

}returnresult;

}

}---------

/*** 調用遠程接口,驗證用戶數據是否合理*/

public classUserRemoteVerify {//post請求

public static String doPost(String json) throwsException{//創建URL對象,設置請求url

URL url = new URL("http://127.0.0.1:8089/user/service");//調用URL對象的openConnection( )來獲取HttpURLConnection對象實例

HttpURLConnection conn =(HttpURLConnection)url.openConnection();//請求方法為POST

conn.setRequestMethod("POST");//設置連接超時為5秒

conn.setConnectTimeout(5000);//允許輸入輸出

conn.setDoInput(true);

conn.setDoOutput(true);//不能緩存

conn.setUseCaches(false);//至少要設置的兩個請求頭//設置頭部信息

conn.setRequestProperty("headerdata", "ceshiyongde");//一定要設置 Content-Type 要不然服務端接收不到參數

conn.setRequestProperty("Content-Type", "application/Json; charset=UTF-8");//輸出流包含要發送的數據,要注意數據格式編碼

OutputStream op=conn.getOutputStream();

op.write(json.getBytes());//服務器返回東西了,先對響應碼判斷

String result = null;if (conn.getResponseCode() == 200) {//用getInputStream()方法獲得服務器返回的輸入流

InputStream in =conn.getInputStream();//流轉換為二進制數組,read()是轉換方法

byte[] data = new byte[1024];

in.read(data);

result= new String(data, "UTF-8");

in.close();returnresult;

}returnresult;

}

}-------------遠程服務端代碼

@Controllerpublic classUserController {/*** 使用json接收客戶端請求,返回json數據;url="http://127.0.0.1:8089/user/service"*/@PostMapping("user/service")

@ResponseBodypublic String dealUserForJson(HttpServletRequest request)throwsException{//調用處理服務,對遠程數據進行校驗,返回對應的結果

String result =UserRemoteHandle.verifyUser(request);returnresult;

}

}--------

/*** 處理遠程數據驗證*/

public classUserRemoteHandle {/*** 驗證遠程用戶信息,若正確,則返回成功;否則返回失敗*/

public static String verifyUser(HttpServletRequest request) throwsException{//根據HttpServletRequest獲取輸入流對象

InputStream inputStream = null;try{

inputStream=request.getInputStream();//使用byte[]數組存儲接收到的數據

byte[] bytes = new byte[1024];//從輸入流中將數據讀取到bytes中

inputStream.read(bytes);//將bytes轉換為字符串類型

String json = newString(bytes);//int i = 1/0;//服務端異常測試

if(StringUtils.isNotBlank(json)){

JSONObject jsonObject=JSONObject.fromObject(json);//將json類型轉換為對象

User user = (User)JSONObject.toBean(jsonObject,User.class);//判斷用戶名和密碼是否正確;假設用戶名:lisi,密碼:123;

if(user.getName().equals("lisi") && user.getPassword().equals("123")){return "success";

}

}

}catch(Exception e){

e.printStackTrace();return "服務端出現異常";

}finally { //釋放資源

if(inputStream != null){

inputStream.close();

}

}//數據不符,返回錯誤信息

return "message is error";

}

}

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

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

相關文章

LindDotNetCore~職責鏈模式的應用

回到目錄 職責鏈模式 它是一種設計模塊,主要將操作流程與具體操作解耦,讓每個操作都可以設置自己的操作流程,這對于工作流應用是一個不錯的選擇! 下面是官方標準的定義:責任鏈模式是一種設計模式。在責任鏈模式里&…

MR程序的幾種提交運行模式

MR程序的幾種提交運行模式 本地模型運行 1/在windows的eclipse里面直接運行main方法,就會將job提交給本地執行器localjobrunner執行 ----配置path:D:\hadoop-2.7.2\bin ----配置hadoop_home:D:\hadoop-2.7.2 ----復制 hadoop.dll和winutil…

構件之法讀書筆記04

我們前兩周我們團隊一起制作了一個大學生記賬軟件,但是我們沒有對我們的軟件進行測試,只要是這個功能能夠順利進行,我們就覺得OK。 其實,我認為我們的軟件是有問題的,對于一些極限的操作能否完成,在各種環境…

零點起飛學java視頻_零點起飛學java (劉升華) 高清PDF_IT教程網

資源名稱:零點起飛學java (劉升華) 高清PDF第1篇 java開發基礎第1章 java概述( 教學視頻:37分鐘) 2第2章 基本數據類型及運算( 教學視頻:52分鐘) 14第3章 java程序流程控制( 教學視頻:33分鐘) 36第4章 類與對…

【Spark】開發Spark選擇Java還是Scala?

Spark-Java-Scala-哪種語言 spark java 支持_百度搜索(1 封私信)Spark 中用 Scala 和 java 開發有什么區別? - 知乎(1 封私信)Spark平臺下,scala比java更有優勢么? - 知乎

vector 修改 java_java對vector動態數組中的對象排序,以下代碼有何問題,如何修改?...

展開全部package com.tx.collection;import java.util.Comparator;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;import java.util.TreeSet;import java.util.Vector;public class Student {String name;int score;public S…

hadoop的序列化與java的序列化區別

java的序列化機制 java序列化時會把具體類的數據和類的繼承結構信息都序列化傳遞。如下圖hadoop的序列化機制 序列化類的數據,但是不序列化類的繼承結構信息。 網絡傳遞的時候就少了很多流量,hadoop也不需要類的繼承關系,只要類的數據就夠…

java mail 已發送_JavaMail獲取已發送郵件

public static voidmain(String args[]) {Properties props new Properties(); //參數配置props.setProperty("mail.transport.protocol", "smtp"); //使用的協議(JavaMail規范要求)props.setProperty("mail.smtp.host", "smtp.exmail.qq.c…

ORA-08103: object no longer exists

今天工具箱報錯: ORA-08103: object no longer exists 查了原因,是有session在操作表,比如插入,更新等。而工具箱這個操作剛好在select表,所以報錯。-------下文是英文解釋----- ORA-08103: object no longer exists錯…

【Spark】Spark-空RDD判斷與處理

Spark-空RDD判斷與處理 SparkKafkaDemo - Streaming Statisticsrdd isempty count_百度搜索Spark RDD.isEmpty costs much time - Stack OverflowSpark Streaming中空RDD的處理-Spark-about云開發[SPARK-5270] Provide isEmpty() function in RDD API - ASF JIRA19 Spark Stre…

JDBC開發步驟

JDBC開發步驟: 1、加載數據庫驅動 2、通過DriverManager獲取數據庫連接Connection 3、通過Connection獲取Statement/PreparedStatement 4、將SQL語句綁定到Statement/PreparedStatement中去,準備向數據庫發送SQL語句 5、執行完sql語句后&#xff0c…

DAY3-“忙里偷閑”找你玩耍2018-1-11

接觸Java第三天,嘿嘿,今天近代史期末考試,提前一小時交卷,回宿舍繼續學習,中午去見女神姐姐了,每次見完女神姐姐都是滿滿地動力。這次女神姐姐告訴我們要好好規劃自己的時間,早上花20分鐘規劃好…

java 數據保存內存_java中的各種數據類型在內存中存儲的方式 一

1.java是如何管理內存的java的內存管理就是對象的分配和釋放問題。(其中包括兩部分)分配:內存的分配是由程序完成的,程序員需要通過關鍵字new為每個對象申請內存空間(基本類型除外),所有的對象都在堆(Heap)中分配空間。釋放:對象的…

Gradle學習之構建java與web項目

一.使用Gradle的java插件構建Java項目 1)Gradle插件包含了若干個接口定義和已有的任務項,語法結構:apply plugin:插件名 ,此處我們定義插件 apply plugin : java 2)Gradle希望我們的java項目需要遵循以下規范: src/mai…

Hibernate單表開發步驟

Hibernate單邊開發步驟: 1、創建Configuration,加載src/hibernate.cfg.xml配置文件,該配置文件中又去加載Hello.hbm.xml映射文件。 2、通過Configuration創建重量級SessionFactory。重量級:創建慢,內存占用大&#…

基于ssm出租車管理系統的設計與實現論文

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術,讓傳統數據信息的管理升級為軟件存儲,歸納,集中處理數據信息的管理方式。本出租車管理系統就是在這樣的大環境下誕生,其可以幫助管理者在短時間內處理完畢龐大的數據信息&…

redission java_Java注解如何基于Redission實現分布式鎖

這篇文章主要介紹了Java注解如何基于Redission實現分布式鎖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下1、定義注解類Target({ ElementType.METHOD })Retention(RetentionPolicy.RUNTIME)Documentedpublic i…

Spring Security源碼分析四:Spring Social實現微信社交登錄

2019獨角獸企業重金招聘Python工程師標準>>> 社交登錄又稱作社會化登錄(Social Login),是指網站的用戶可以使用騰訊QQ、人人網、開心網、新浪微博、搜狐微博、騰訊微博、淘寶、豆瓣、MSN、Google等社會化媒體賬號登錄該網站。 前言…

jdbc開發優缺點

1)優點:簡單易學,上手快,非常靈活構建SQL,效率高 2)缺點:代碼繁瑣,難以寫出高質量的代碼(例如:資源的釋放,SQL注入安全性等) 開發者既要寫業務邏輯&#xff0…

java numberformat 方法_Java NumberFormat parse()用法及代碼示例

parse(str)方法是java.text.NumberFormat的內置方法,該方法從給定字符串的開頭解析文本以產生數字。該方法可能不使用給定字符串的整個文本用法:public Number parse?(String str)參數:該函數接受一個字符串str,其開頭應進行分析。返回值&am…