如需使用最新稳定版本,请使用 Spring Integration 7.0.4spring-doc.cadn.net.cn

HTTP 示例

本节通过几个示例总结我们对 Spring Integration HTTP 支持的介绍。spring-doc.cadn.net.cn

Multipart HTTP 请求 — RestTemplate(客户端)和 Http Inbound Gateway(服务器端)

此示例展示了如何使用 Spring 的 RestTemplate 发送 multipart HTTP 请求,并通过 Spring Integration 的 HTTP 入站适配器接收它。 我们创建一个 MultiValueMap 并填充 multipart 数据。 RestTemplate 负责其余工作(此处并无双关语),将其转换为 MultipartHttpServletRequest。 该特定客户端发送一个包含公司名称和图片文件(公司徽标)的 multipart HTTP 请求。 以下代码列表展示了该示例:spring-doc.cadn.net.cn

RestTemplate template = new RestTemplate();
String uri = "http://localhost:8080/multipart-http/inboundAdapter.htm";
Resource s2logo =
   new ClassPathResource("org/springframework/samples/multipart/spring09_logo.png");
MultiValueMap map = new LinkedMultiValueMap();
map.add("company", "SpringSource");
map.add("company-logo", s2logo);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(new MediaType("multipart", "form-data"));
HttpEntity request = new HttpEntity(map, headers);
ResponseEntity<?> httpResponse = template.exchange(uri, HttpMethod.POST, request, null);

这就是我们客户端所需的全部内容。spring-doc.cadn.net.cn

在服务器端,我们有以下配置:spring-doc.cadn.net.cn

<int-http:inbound-channel-adapter id="httpInboundAdapter"
    channel="receiveChannel"
    path="/inboundAdapter.htm"
    supported-methods="GET, POST"/>

<int:channel id="receiveChannel"/>

<int:service-activator input-channel="receiveChannel">
    <bean class="org.springframework.integration.samples.multipart.MultipartReceiver"/>
</int:service-activator>

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

'httpInboundAdapter'接收请求并将其转换为一个有效负载为LinkedMultiValueMapMessage。 随后我们在'multipartReceiver'服务激活器中解析它,如下例所示:spring-doc.cadn.net.cn

public void receive(LinkedMultiValueMap<String, Object> multipartRequest){
    System.out.println("### Successfully received multipart request ###");
    for (String elementName : multipartRequest.keySet()) {
        if (elementName.equals("company")){
            System.out.println("\t" + elementName + " - " +
                ((String[]) multipartRequest.getFirst("company"))[0]);
        }
        else if (elementName.equals("company-logo")){
            System.out.println("\t" + elementName + " - as UploadedMultipartFile: " +
                ((UploadedMultipartFile) multipartRequest
                    .getFirst("company-logo")).getOriginalFilename());
        }
    }
}

您应该看到以下输出:spring-doc.cadn.net.cn

### Successfully received multipart request ###
   company - SpringSource
   company-logo - as UploadedMultipartFile: spring09_logo.png