繁体   English   中英

Spring Resttemplate交换方法来调用PATCH请求

[英]Spring Resttemplate exchange method to call a PATCH request

我有一个带有Spring框架的Java 8应用程序。 我们需要从应用程序中使用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:无法编写请求:未为请求类型[com.xyz.myobject.RequestAdmission]和内容类型[application / xml]找到合适的HttpMessageConverter

当我调试代码时,restTemplate已注册以下7个转换器:

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

我还尝试添加以下行:

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

但仍然无法正常工作。

RequestAdmission和ResponseAdmission是从xsds生成的JAXB POJO对象。

Web服务接受xml形式的请求,响应也采用xml形式。

请指教。

您可以将自己的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();

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM