HTTP Samples

本节通过一些示例总结了我们对 Spring Integration 的 HTTP 支持的介绍。

This section wraps up our coverage of Spring Integration’s HTTP support with a few examples.

Multipart HTTP Request — RestTemplate (Client) and Http Inbound Gateway (Server)

此示例演示了使用 Spring 的 RestTemplate 发送多部分 HTTP 请求并使用 Spring Integration HTTP 入站适配器接收它的简单性。我们创建了一个 MultiValueMap 并使用多部分数据填充它。RestTemplate 通过将其转换为 MultipartHttpServletRequest 来处理其余部分(无意双关)。此特定客户端将发送一个包含公司名称和图像文件(公司标志)的多部分 HTTP 请求。以下清单显示了示例:

This example shows how simple it is to send a multipart HTTP request with Spring’s RestTemplate and receive it with a Spring Integration HTTP inbound adapter. We create a MultiValueMap and populate it with multipart data. The RestTemplate takes care of the rest (no pun intended) by converting it to a MultipartHttpServletRequest. This particular client sends a multipart HTTP Request that contains the name of the company and an image file (the company logo). The following listing shows the example:

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);

这是我们对客户的所有需求。

That is all we need for the client.

在服务器端,我们采用以下配置:

On the server side, we have the following configuration:

<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”接收请求并将其转换为一个 消息,其有效载荷是 LinkedMultiValueMap。然后我们在“multipartReceiver”服务激活器中对其解析,如下例所示:

The 'httpInboundAdapter' receives the request and converts it to a Message with a payload that is a LinkedMultiValueMap. We then parse that in the 'multipartReceiver' service-activator, as the following example shows:

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());
        }
    }
}

你应该会看到以下输出:

You should see the following output:

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