Различное поведение OkHttp3 в Linux и Windows - PullRequest
0 голосов
/ 30 октября 2019

У меня есть некоторый код, который работает нормально на платформе Windows, однако, код дает другое поведение в Linux.

Я использовал следующий код для отправки запроса на HTTP-сервер для получения некоторых сообщений. что я сделал следующим образом:

  1. разверните код на моей локальной машине 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?

...