Обмен restTemplate часто приводит к ошибке 400 - PullRequest
0 голосов
/ 21 декабря 2018

В моем Android-приложении я пытаюсь сделать GET-запрос через restTemplate.exchange, но это очень часто приводит к ошибке 400, очень редко это 200-ответ.

GET request for "http://someURL/items/modified/2018-12-20T12%253A47%253A43%252B01%253A00" resulted in 400 (); invoking error handler

org.springframework.web.client.HttpClientErrorException: 400

Я пытался выполнить запрос с закодированным и декодированным параметром, но это та же проблема.Единственное, что меняется, это отметка времени в запросе.Я не думаю, что это бэкэнд-проблема, потому что я сделал пару запросов через Swagger и Postman на одном интерфейсе, и все они работали без проблем.Я также пытался обновить Spring-Android до версии 2.0.0.M3, но все еще та же проблема.

String url = ServiceAppConstants.HOSTNAME + ServiceAppConstants.REST_ITEMS_MODIFIED +                             URLEncoder.encode(lastSynchronisationDate);
try {
  HttpEntity<String> httpEntity = RestServiceUtils.getHttpEntity(context);
  RestTemplate restTemplate = new RestTemplate();
  restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

   // runs in the error here
   ResponseEntity<ArrayList> response = restTemplate.exchange(url, HttpMethod.GET, httpEntity, ArrayList.class); 
   items= response.getBody();
   items = mapper.convertValue(items, new TypeReference<List<Items>>(){});
} catch (RestClientException e) {
    /* do stuff */
}

для установки токена

@NonNull
public static HttpEntity<String> getHttpEntity(Context context) {
    UserStorage userStorage = new UserStorage(context);
    HttpHeaders headers = new HttpHeaders();
    try {
        String token = userStorage.getJsonWebToken();
        headers.set(ServiceAppConstants.HEADER_SECURITY_TOKEN, token);
    }catch (Exception ex){
        Log.e(RestServiceUtils.class.getName(), "Could not get json web token", ex);
    }
    return new HttpEntity<String>("parameters", headers);
}

Так выглядит запросв профилировщике Android

enter image description here

Так выглядит запрос, если он отправляется swagger

enter image description here

1 Ответ

0 голосов
/ 21 декабря 2018

использовать новые HttpEntity (заголовки);(без «параметров»)

строка «параметры» - это тело запроса в соответствии с HttpEntity документацией , которое может вызвать проблему.

...