HTTP 範例
本節總結我們對 Spring Integration HTTP 支援的涵蓋範圍,並提供一些範例。
Multipart HTTP 請求 — RestTemplate (用戶端) 和 Http Inbound Gateway (伺服器)
此範例示範使用 Spring 的 RestTemplate
發送 multipart HTTP 請求,並使用 Spring Integration HTTP inbound adapter 接收它有多麼簡單。我們建立一個 MultiValueMap
並用 multipart 資料填充它。RestTemplate
負責其餘部分(沒有雙關語),將其轉換為 MultipartHttpServletRequest
。此特定用戶端發送一個 multipart HTTP Request,其中包含公司名稱和影像檔(公司標誌)。以下清單顯示了範例
RestTemplate template = new RestTemplate();
String uri = "https://127.0.0.1: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);
這就是用戶端所需的一切。
在伺服器端,我們有以下設定
<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' 接收請求並將其轉換為 Message
,其 payload 是 LinkedMultiValueMap
。然後我們在 'multipartReceiver' service-activator 中解析它,如下列範例所示
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());
}
}
}
您應該看到以下輸出
### Successfully received multipart request ###
company - SpringSource
company-logo - as UploadedMultipartFile: spring09_logo.png