java - restTemplate 交换经常导致 400 错误

原文 标签 java android spring rest resttemplate

在我的 Android 应用程序中,我尝试通过 restTemplate.exchange 发出 GET 请求,但它经常导致 400 错误,很少是 200 响应。
GET request for "http://someURL/items/modified/2018-12-20T12%253A47%253A43%252B01%253A00" resulted in 400 (); invoking error handlerorg.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 */
}

设置 token
@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 profiler 中的样子

enter image description here

如果它是由 swagger 发送的,这就是请求的样子

enter image description here

最佳答案

使用新的 HttpEntity(headers); (没有“参数”)

“参数”字符串是根据 HttpEntity documentation 的请求正文
这可能会导致问题。

关于java - restTemplate 交换经常导致 400 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53882722/

相关文章:

java - Android Studio 3.o 不给 android

java - 在 For 循环中执行递归

android - 谷歌地图 api key - 跨平台

java - 尝试在空对象引用上调用虚拟方法'int android.webkit.WebView.loadUrl()'

java - Spring 启动应用程序: how to set profile propery with spel?

java - 使用GWT使用XMLHttpRequest发送XML

java - 从静态方法崩溃中调用非静态方法

spring - InvalidDataAccessResourceUsageException : Unexpected cursor position change

Spring 4 - Autowire 通用

java - Libgdx SpriteBatch.SetProjectionMatrix 使 spritebatch 不绘制