Spring Resttemplate метод обмена для вызова запроса PATCH - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть приложение Java 8 с рамкой Spring.Нам нужно вызвать операцию исправления с помощью REST из нашего приложения.

Фрагмент кода выглядит следующим образом:

import com.xyz.myobject.ResponseAdmission;
import com.xyz.myobject.RequestAdmission;

@Repository
public class AdmissionRepository {

   @Autowired
   private RestTemplate restTemplate;

   public ResponseObject updateAdmission(RequestAdmission requestAdmission, String admissionId) {

   UriBuilder uriBuilder =  UriBuilder.fromUri("https://admissionportal.com").path("admission").path("admissionId="+admissionId);

   HttpEntity<RequestAdmission> admissionEntity = new HttpEntity<>(requestAdmission, this.getHeaders);

   ResponseEntity<ResponseAdmission> responseEntity = this.restServiceESBSupport.exchange(uriBuilder.build(), HttpMethod.PATCH, admissionEntity , ResponseAdmission.class);

   return responseEntity.getBody();

}

public MultiValueMap<String, String> getHeaders() {
        MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
        headers.add("Accept", "application/xml");
        headers.add("Content-Type", "application/xml");
        return headers;
    }

}

Когда я выполняю приведенный выше код, когда строка с ключевым словом 'exchange'выполняется, выдает ошибку как:

org.springframework.web.client.RestClientException: Не удалось записать запрос: не найден подходящий HttpMessageConverter для типа запроса [com.xyz.myobject.RequestAdmission] итип содержимого [application / xml]

Когда я отлаживал код, restTemplate зарегистрировал следующие 7 зарегистрированных преобразователей:

ByteArrayHttpMessageConverter,
StringHttpMessageConverter,
ResourceHttpMessageConverter,
SourceHttpMessageConverter,
AllEncompassingFormHttpMessageConverter,
Jaxb2RootElementHttpMessageConverter,
MappingJackson2HttpMessageConverter

Я также попытался добавить следующую строку:

this.restTemplate.getMessageConverters().add(new Jaxb2RootElementHttpMessageConverter());

Но все еще не работает.

RequestAdmission и ResponseAdmission являются объектами JAXB POJO, сгенерированными из xsds.

Веб-сервис принимает запрос в формеxml и ответ также в виде xml.

Пожалуйста, сообщите.

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете создать свой собственный XML в виде строки и использовать его в своем запросе, например так:

@Repository
public class AdmissionRepository {

   @Autowired
   private RestTemplate restTemplate;

   public ResponseObject updateAdmission(RequestAdmission requestAdmission, String admissionId) {

   UriBuilder uriBuilder =  UriBuilder.fromUri("https://admissionportal.com").path("admission").path("admissionId="+admissionId);
   String xmlString = // create an actual valid XML string with all the <tag>value</tag> and the whole structure.
   HttpEntity<String> admissionEntity = new HttpEntity<>(xmlString, this.getHeaders);

   ResponseEntity<ResponseAdmission> responseEntity = this.restServiceESBSupport.exchange(uriBuilder.build(), HttpMethod.PATCH, admissionEntity , ResponseAdmission.class);

   return responseEntity.getBody();

}
...