У меня есть некоторый код, который работает нормально на платформе Windows, однако, код дает другое поведение в Linux.
Я использовал следующий код для отправки запроса на HTTP-сервер для получения некоторых сообщений. что я сделал следующим образом:
- разверните код на моей локальной машине Windows, затем инициируйте запрос и получите ответ сервера.
параметры:
{"articleid": "", "endtime": "2019-10-29T18: 00: 00", "starttime": "2019-10-29T16: 00: 00", "areaid": "", "title": "", "pageIndex": "1"}
ответ сервера:
{"result": 1, "errorcode": "", "message": "", "pageindex": 1, "nextpage": 2, "размер страницы": 100, "data": [... некоторые данные здесь ...]}
разверните код на сервере Linux, запустите запрос с теми же параметрами на шаге 1, однако ответ сервера будет другим.
параметры:
{ "ArticleID": "", "время окончания": "2019-10-29T18: 00: 00", "время_запуска": "2019-10-29T16: 00: 00", "Areaid": "", "название": "", "pageIndex": "1"}
ответ сервера:
{"result": 1, "errorcode": "", "message": "", "pageindex": 1, "nextpage": null, "pagesize": 0, "data": []}
Мы просмотрели код, но не можем найти причиныразличные варианты поведения.
Я полагаю, что в разных jar-файлах могут существовать один / несколько файлов классов java с одинаковыми именами, и Windows / Linux загружают разные файлы классов, что вызывает проблему, но после просмотра файла jar,У меня тоже нет идей. jar-файлы, относящиеся к okhttp, выглядят следующим образом:
okhttp-3.10.0.jar
okio-1.14.0.jar
netty-codec-http-4.1.31.Final.jar
httpcore-nio-4.4.10.jar
httpcore-4.4.10.jar
httpclient-4.5.6.jar
httpasyncclient-4.1.4.jar
public static String okHttpPost(String requestUrl,Map<String,String> map,String orgId,String taskID) throws IOException {
String exceptionMessage="";
String responseResult="";
try {
FormBody.Builder newFormBody = new FormBody.Builder();
Set<String> keys = map.keySet();
for(String key:keys){
newFormBody.add(key,map.get(key));
}
RequestBody body = newFormBody.build();
log.info("server url : "+requestUrl+";paramters:"+new ObjectMapper().writeValueAsString(map));
Request request = new Request.Builder()
.url(requestUrl)
.post(body)
.build();
Call call = okHttpClient.newCall(request);
Response response = call.execute();
if (response.code() != 200) {
exceptionMessage = "request failed, taskID:" + taskID + "orgid:" + orgId + "response mesage:"+response.toString();
log.info(exceptionMessage);
}
responseResult = response.body().string();
log.info("server url : " + requestUrl + ", reponse messages:"+responseResult);
return responseResult;
} catch (IOException e) {
e.printStackTrace();
}finally {
if (!responseResult.contains("token")) {
do some thing;
}
}
return null;
}
Может дать какие-либо идеи о том, почему поведение одного и того же кода отличается в Windows и на платформе Linux?
Как изменитькод, чтобы позволить это хорошо работает на Linux?