利用Java的HttpURLConnection進行遠程url請求(調用遠程接口) 測試類:請求類型為json,以post方式請求,利用OutputStream寫入數據 實體類: public class User implements Serializable { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } ------- @RunWith(SpringRunner.class) @SpringBootTest public class Springboot02ApplicationTests { @Autowired private UserService userService; @Test public void contextLoads(){ User user = new User(); user.setName("lisi"); user.setPassword("123"); //調用遠程接口方法,獲取返回結果類型 String result = userService.idendifyUser(user); System.out.println(result); } } --------- @Service public class UserServiceImpl implements UserService { public String idendifyUser(User user){ //將對象轉換為json,然后發送; String json = JSONObject.fromObject(user).toString(); String result = null; try { result = UserRemoteVerify.doPost(json); }catch (Exception e){ e.printStackTrace(); } return result; } } --------- /** * 調用遠程接口,驗證用戶數據是否合理 */ public class UserRemoteVerify { //post請求 public static String doPost(String json) throws Exception{ //創建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(); return result; } return result; } } ------------- 遠程服務端代碼 @Controller public class UserController { /** * 使用json接收客戶端請求,返回json數據;url="http://127.0.0.1:8089/user/service" */ @PostMapping("user/service") @ResponseBody public String dealUserForJson(HttpServletRequest request)throws Exception{ //調用處理服務,對遠程數據進行校驗,返回對應的結果 String result = UserRemoteHandle.verifyUser(request); return result; } } -------- /** * 處理遠程數據驗證 */ public class UserRemoteHandle { /** * 驗證遠程用戶信息,若正確,則返回成功;否則返回失敗 */ public static String verifyUser(HttpServletRequest request) throws Exception{ //根據HttpServletRequest獲取輸入流對象 InputStream inputStream = null; try { inputStream = request.getInputStream(); //使用byte[]數組存儲接收到的數據 byte[] bytes = new byte[1024]; //從輸入流中將數據讀取到bytes中 inputStream.read(bytes); //將bytes轉換為字符串類型 String json = new String(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"; } }