2 つのレスト サービスと 1 つのリスナーがあります。
- サービスA
- サービスB
- リスナー L1
- ステップ 1 - リスナー L1 はローカルからファイルを読み取り、複数値マップをサービス A に送信します。サービス A はデータベースからドキュメントを取得し、それをバイトとしてリスナー L1 に返します。
ステップ 2 - リスナー L1 は、別の複数値マップをサービス B に送信し、ドキュメントを保存します。
ステップ 1 は、MultiValueMap を使用して期待どおりに機能しています。同じ手順を使用してドキュメント バイトをサービス B に送信しようとしているときのように、ステップ 2 中に -要求を書き込めませんでした: 要求タイプに適した HttpMessageConverter が見つかりません [org.springframework. util.LinkedMultiValueMap] およびコンテンツ タイプ [application/octet-stream]。同じ手順に従っていますが、まだ問題が発生しています。
以下のコード サンプルを見つけて、この問題を解決する方法を教えてください。
Listener1.java
public Message<?> processJMSReqMsqAndSendToRest1(String message) throws Exception {
MultiValueMap<String, Object> mainMap = new LinkedMultiValueMap<String, Object>();
Map<String, String> secondaryMap = new HashMap<String, String>();
secondaryMap.put("key1", "value1");
secondaryMap.put("key2", "value2");
secondaryMap.put("key3", "value3");
byte[] messageBytes = message.getBytes();
File newFile = new File("D:\\Temp\\temp.jpg");
InputStream is = new FileInputStream(newFile);
byte[] fileBytes = IOUtils.toByteArray(is);
is.close();
mainMap.add("metaData", secondaryMap);
mainMap.add("messageBytes", messageBytes );
Message<?> message1 = MessageBuilder.withPayload(mainMap).build();
return message1;
}
public Message<?> processRest1AndSendToRest2(Message<?> obj) throws Exception{
byte[] docBytes = (byte[])obj.getPayload();
MultiValueMap<String, Object> mainMap = new LinkedMultiValueMap<String, Object>();
Map<String, String> secondaryMap = new HashMap<String, String>();
secondaryMap.put("key1", "value1");
secondaryMap.put("key2", "value2");
secondaryMap.put("key3", "value3");
mainMap.add("metaData", secondaryMap);
mainMap.add("messageBytes", docBytes);
Message<?> message1 = MessageBuilder.withPayload(mainMap).build();
return message1;
}
春の統合xml
<int-http:outbound-gateway
id="docServiceOutBoundGateway" request-channel="docMetaDataIn"
http-method="POST" url="http://localhost:8030/getDocument"
expected-response-type="[B" reply-channel="sourceDocumentOutLv1">
</int-http:outbound-gateway>
<int:service-activator
input-channel="sourceDocumentOutLv1"
ref="docConversionOrchestratorImpl" method="processRest1AndSendToRest2"
output-channel="sourceDocumentOutLv2" />
<int-http:outbound-gateway request-channel="sourceDocumentOutLv2"
http-method="POST" url="http://localhost:8030/sendDocument"
encode-uri="false"
expected-response-type="java.lang.String" reply-channel="processedDocOutLv1">
</int-http:outbound-gateway>
サービス A:
@RequestMapping(value = "/getDocument", method = RequestMethod.POST)
@ResponseBody
public byte[] testRest1(@RequestPart("metaData")Map<String,String> metaData,@RequestPart("messageBytes")byte[] messageBytes) {
byte[] r2 = //get doc from database as bytes
return r2;
}
サービス B:
@RequestMapping(value = "/sendDocument", method = RequestMethod.POST)
@ResponseBody
public String tesMySql1(@RequestPart("metaData")Map<String,String> metaData,@RequestPart("messageBytes")byte[] messageBytes) {
return "working";
}
Javaを介して残りのテンプレートを介して直接送信しようとしましたが、正常に機能しています。しかし、私は構造が一貫していて、春の統合xmlを介して行われることを望んでいます。スプリング ブート 2.0.2 BOM を使用しています。