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