You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:54:05