利用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";
}
}