http請求異步同步

1.http遠程請求接口,連接超時問題
2.最初設置請求連接時間,但是還是不好使。後來發現是異步的,修改了一下,就可以了

public static final OkHttpClient httpClient = new OkHttpClient();


//同步
public static String getLongRangeBat(String url,List<String> fileNames,Map<String,Object> map) throws IOException{
		OkHttpClient httpClient = new OkHttpClient.Builder().readTimeout(5,TimeUnit.MINUTES).build();
		Request request= new Request.Builder().url(url).post(getRequestBody(fileNames,map)).build();
		Response  response =  httpClient.newCall(request).execute();
		String strBody = response.body().string();
		return strBody;
}

//異步
public static ResponseBody upLoadFileConnector(String url,List<String> fileNames,Map<String,Object> map) throws IOException{
		httpClient.newBuilder().connectTimeout(60,TimeUnit.MINUTES)//連接超時時間
		  				.readTimeout(120, TimeUnit.MINUTES);//設置讀取超時時間
		Call call = httpClient.newCall(getRequest(url,fileNames,map)) ;
		Response response = call.execute();
		if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
		return response.body();
}
	
private static Request getRequest(String url, List<String> fileNames,Map<String,Object> map) {
        Request.Builder builder = new Request.Builder();
        builder.url(url).header("authorization", "999999").post(getRequestBody(fileNames,map));
        return builder.build();
}



private static RequestBody getRequestBody(List<String> fileNames,Map<String,Object> map) {
        MultipartBody.Builder builder = new MultipartBody.Builder();
        builder.setType(MultipartBody.FORM);    //注意這裏是from表單
        if(fileNames != null){
    	   for(String filePath:fileNames){
               File file = new File(filePath); 
               builder.addFormDataPart("file",file.getName(),
                     RequestBody.create(MediaType.parse("multipart/form-data"), file) 
               );
           }
        }
        if(map != null ){
        	Set<Entry<String, Object>> entrySet = map.entrySet();
    		for (Entry<String, Object> entry : entrySet) {
    			  builder.addFormDataPart(entry.getKey(),entry.getValue()==null?"":entry.getValue().toString());
    		} 
        }
        return builder.build();
}





接受參數需要這個註解:@FormParam
@PostMapping(value="/autoCreateTestOut")
@ResponseBody
public String autoCreateTestOut(@FormParam("filePath") String filePath){
    String s = uploadServiceI.autoCreateTestOut(filePath);
    return s;
}

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章