java - 在服务调用java spring boot中使用rest模板发送和接收字节数组
问题描述
我想使用 restTemplate 将从 kafka 主题接收到的消息发送到不同的服务。消息可以是任何类型,这就是为什么我想将有效负载转换为字节数组并发送到下一个服务并期望下一个服务将字节数组反序列化为所需的格式。
我在两个部分面临挑战 -
- 当我尝试使用 restTemplate 发送字节数组时,我应该设置什么内容类型?
- 我尝试使用 octate-stream 但是当我在第二个服务中接收字节数组时,它无法转换回 xml 格式的字符串(我正在测试)
这是下面的示例 -
KafkaTopicListener.java
@KafkaListener(topics = "test-topic", groupId = "group-id", containerFactory = "kafkaListenerContainerFactory")
public void listen(ConsumerRecord<String, byte[]> cr,
@Payload byte[] payload) {
System.out.println("KafkaTopicListener.listen : payload ::"+payload.toString());
String s = new String(payload);
System.out.println("KafkaTopicListener.listen : payload ::"+s); //getting proper string for an xml formatted in string that i posted on kafka
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM));
HttpEntity<Object> entity = new HttpEntity<>(payload, headers);
restTemplate.postForLocation(nextSerivceURL, entity);
}
NextServiceController.java
@RequestMapping(value = "/testByteArray", method = RequestMethod.POST)
public void testByteArray(@RequestBody byte[] payload) throws IOException, ClassNotFoundException {
//String s = new String(payload);
//System.out.println("NextServiceController.testByteArray::"+decoded.toString());
String s = new String(payload);
System.out.println("NextServiceController.testByteArray String::"+s);
// getting only a encoded string like NextserivceController.testByteArray //String::"ICAgIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQogICAgPGx2Yl9zeXN0ZW0geG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNja//GVtYS1pbnN0YW5jZSIgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249InNhbXBsZS54c2QiPg0KICAgIDxsaW5lIGlkPSIxIj4NCiAgICANCiAgICAgICAgPHR5cGU+dHlwZTwvdHl//wZT4NCiAgICAgICAgPHN0YXJ0X3RpbWVfb3BlcmF0aW9uPjEyOjA6MDA8L3N0YXJ0X3RpbWVfb3BlcmF0aW9uPg0KICAgICAgICA8ZW5kX3RpbWVfb3BlcmF0aW9uPjEyOjAwOjAwPC9lb//mRfdGltZV9vcGVyYXRpb24+DQogICAgICAgIDxjb3VudF92ZWhpY2xlcz4wPC9jb3VudF92ZWhpY2xlcz4NCiAgICAgICAgPG1hcD5tYXA8L21hcD4NCiAgICAgICAgPHN0YXJ0X3N0YXR//pb24gaWQ9IjEiPg0KICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPg0KICAgICAgICA8L3N0YXJ0X3N0YXRpb24+DQogICAgICAgIDxlbmRfc3RhdGlvbiBpZD0iMSI+DQogICAgICAgIDxuY//W1lPm5hbWU8L25hbWU+DQogICAgICAgIDwvZW5kX3N0YXRpb24+DQogICAgICAgIDxpbnRlcm1lZGlhdGVfc3RhdGlvbnMgaWQ9IjEiPg0KICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPg0//KICAgICAgICA8L2ludGVybWVkaWF0ZV9zdGF0aW9ucz4NCiAgICAgICAgPHZlaGljbGVzX2xpbmUgaWQ9IjEiPg0KICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPg0KICAgICAgICA8Y2FwY//WNpdHk+MDwvY2FwYWNpdHk+DQogICAgICAgIDwvdmVoaWNsZXNfbGluZT4NCiAgICA8L2xpbmU+DQogICAgPC9sdmJfc3lzdGVtPg0K"
}
解决方案
推荐阅读
- javascript - 通过分页从 Rest API 调用加载所有数据需要太长时间,并且在加载所有内容之前无法执行任何操作
- python - 什么是解析具有不同数据类型的 JSON 响应的好方法?
- node.js - TypeError:无法读取未定义的 Youtube 数据 API 身份验证 NodeJS 的属性“redirect_uris”
- react-native - 反应原生顶部标签栏导航器:指示器宽度以匹配文本
- python - “黑名单”或从 Python 函数的返回中删除某些内容?
- undefined - 打开 index.html 但结果是未定义
- javascript - browser.runtime.sendMessage:“接收端不存在”
- python - 随机森林分类如何在幕后工作?
- javascript - 在轮播控件中单击按钮打开表单
- mongodb - 如何在事务期间从 MongoDB 创建操作中检索 id?