Как я могу устранить ошибку HttpMessageConverterExtractor при использовании метода обмена из RestTemplate?

Я использую шаблон Spring rest, чтобы получить ответ от службы отдыха. Я получаю следующее исключение, но не могу понять проблему. Пожалуйста, найдите подробную информацию ниже. Может ли кто-нибудь предложить, если я что-то упускаю? Я получаю правильный ответ, когда пытаюсь использовать POSTMAN

// Здесь AddFileServerBean - это запрос

RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setBasicAuth(username, password);
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<AddFileServerBean> requestEntity = new HttpEntity<AddFileServerBean>(addFileServerBean,headers);
ResponseEntity<ResponseObject> response = restTemplate.exchange(endPointUrl, HttpMethod.POST, requestEntity, ResponseObject.class);

// Это исключение

Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.util.Assert.noNullElements(Ljava/util/Collection;Ljava/lang/String;)V
at org.springframework.web.client.HttpMessageConverterExtractor.<init>(HttpMessageConverterExtractor.java:77)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.<init>(RestTemplate.java:991)
at org.springframework.web.client.RestTemplate.responseEntityExtractor(RestTemplate.java:822)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:585)
at addfileserver.rest.FileRestTemplate.main(FileRestTemplate.java:280)

// Это исходный код для HttpMessageConverterExtractor

@SuppressWarnings("unchecked")
        HttpMessageConverterExtractor(Type responseType, List<HttpMessageConverter<?>> messageConverters, Log logger) {
            Assert.notNull(responseType, "'responseType' must not be null");
            Assert.notEmpty(messageConverters, "'messageConverters' must not be empty");
            Assert.noNullElements(messageConverters, "'messageConverters' must not contain null elements");
            this.responseType = responseType;
            this.responseClass = (responseType instanceof Class ? (Class<T>) responseType : null);
            this.messageConverters = messageConverters;
            this.logger = logger;
        }

// Это мой ожидаемый объект ответа

{
    "dataObj": {
        "responseCode": 0,
        "messageList": [
            "Test"
        ],
        "values": {
            "uniqueId": "Test",
            "pwd": "Test"
        },
        "objectValue": "-"
    },
    "applicationErrors": null
}

1 ответ

Я думаю, проблема в том, что вы пытаетесь сопоставить результат, полученный с конечной точки отдыха, с ResponseObject: не могли бы вы опубликовать ResponseObject. Также при создании экземпляра RestTemplate попробуйте следующее:

public RestTemplate getRestTemplateInstance(String baseUri) {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
        restTemplate.getMessageConverters().add(new StringHttpMessageConverter());  
        return restTemplate;
    }

Получите экземпляры RestTemplate, передав baseUri и позвоните в конечную точку отдыха.

Другие вопросы по тегам