使用Spring Rest Template时,比较方法违反了它的一般契约
作者:互联网
我们的一个应用程序是通过Spring Rest Template调用另一个应用程序.
HttpEntity<Object> httpEntity = new HttpEntity<>(null);
restTemplate.exchange(URL, HttpMethod.GET, httpEntity,String.class)
我们没有为请求明确设置任何标头.我们遇到以下异常:
Caused by: java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(TimSort.java:895)
at java.util.TimSort.mergeAt(TimSort.java:512)
at java.util.TimSort.mergeCollapse(TimSort.java:437)
at java.util.TimSort.sort(TimSort.java:241)
at java.util.Arrays.sort(Arrays.java:1512)
at java.util.ArrayList.sort(ArrayList.java:1454)
at java.util.Collections.sort(Collections.java:175)
at org.springframework.http.MediaType.sortBySpecificity(MediaType.java:441)
at org.springframework.web.client.RestTemplate$AcceptHeaderRequestCallback.doWithRequest(RestTemplate.java:691)
at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:743)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:567)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:530)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:448)
我们使用的Java版本是:1.8.0_45和Spring:4.1.6
如果有人能提供帮助,那将是非常好的.如果需要,我很乐意提供更多详细信息.
感谢期待.
解决方法:
我想这是使用String.class而不是自定义类时的一个已知问题.
我设法通过定义自己的自定义休息模板来规避这个问题
<bean id="customRestTemplate" class="org.springframework.web.client.RestTemplate">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="writeAcceptCharset" value="false" />
</bean>
</list>
</property>
</bean>
标签:java,spring-mvc,spring,spring-rest 来源: https://codeday.me/bug/20190710/1426391.html