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;
}