在使用Spring的RestTemplate调用REST URL时,我遇到了一个奇怪的问题。我正在使用Spring Boot。
错误仅在大约 10到15次成功通话之后发生,之后不正常。我可以在错误之前顺利地交换数据,在前1到15个呼叫中。网址与someresturl/param1/param2/param3
类似。
public ResponseEntity<String> callRestUrl(CustomReqClass req) {
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
StringBuilder url = new StringBuilder("someresturl");
finishTaskUrl.append("/").append(param1).append("/").append(param2).append("/").append(param3);
ResponseEntity<String> response = null;
HttpEntity<CustomReqClass> request = new HttpEntity<CustomReqClass>(req, getHTTPHeaders());
try {
//first approach
response = restTemplate.postForEntity(url.toString(), request, String.class, Collections.<String, String>emptyMap());
//second approach
response = restTemplate.exchange(url.toString(), HttpMethod.POST, request, String.class);
} catch (Exception e) {
LOGGER.info("Error calling url" + e);
}
return response;
}
public MultiValueMap<String, String> getHTTPHeaders() {
MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add("Authorization", "Basic authabcdxyz");
headers.add("Content-Type", "application/json");
return headers;
}
这里我在我正在使用它的类中自动装配restTemplate对象。 我已经尝试了上述方法 postForEntity 和交换的Rest模板。两者都发生错误。
我在几次成功尝试后获得的例外情况:
java.lang.IllegalArgumentException:比较方法违反了其一般合同!
另外一个想法是,Spring Scheduler机制正在安排上面的代码。调度程序中使用的内部线程是否可能导致此问题?