将XML字符串作为POST参数调用UPS跟踪API的更优实现方案咨询
你当前的实现存在和UPS接口要求不匹配的问题:你配置的Content-Type: application/xml是直接把请求序列化为XML body,但Postman的测试逻辑是用multipart/form-data提交两个独立的表单参数,现有写法会直接返回请求格式错误。
以下是更简洁的可运行实现方案:
1. 引入必要依赖
除了基础的spring-cloud-starter-openfeign外,添加表单支持和XML序列化依赖:
<!-- Feign表单支持 --> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form-spring</artifactId> <version>3.8.0</version> </dependency> <!-- XML序列化支持 --> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </dependency>
Spring Boot会自动装配对应转换器,无需额外手动配置。
2. 简化Feign接口定义
不需要自定义UPSRequest包装类,直接用@RequestPart传递两个表单参数即可,如果你已经通过WSDL生成了对应POJO,可以直接传POJO,无需手动序列化XML:
@FeignClient(name = "upsClient", url = "https://onlinetools.ups.com/ups.app/xml") public interface UPSClient { @PostMapping( value = "/Track", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.TEXT_XML_VALUE ) ResponseEntity<TrackResponse> getTrackResponse( @RequestPart("UPSSecurity") AccessRequest accessRequest, @RequestPart("Body") TrackRequest trackRequest ); }
其中AccessRequest和TrackRequest就是你从WSDL生成的对应POJO类,框架会自动序列化为符合要求的XML字符串作为表单参数提交。
3. 可选简化:返回值自动解析
只要你的TrackResponse是带JAXB/Jackson XML注解的POJO,不需要自定义SOAPDecoder,Spring自带的XML消息转换器会自动完成反序列化,进一步减少冗余代码。
内容的提问来源于stack exchange,提问作者wdrew
相关产品推荐
相关产品推荐

