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 对象。
网络服务接受 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();
}
我有一个带有 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 对象。
网络服务接受 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();
}