spring - 如何在我的 Spring Cloud Stream 项目中将传入的标头映射为 String 而不是 byte[]?
问题描述
我有一个使用 Spring Integration DSL 流和 Kafka 活页夹的简单 Spring Cloud Stream 项目。一切正常,但来自 Kafka 的消息头值以byte[]
.
这意味着我的 SI@Header
参数需要是byte[]
. 哪个有效,但是将它们作为字符串会很好(我关心的所有入站标头都是字符串值)。
我已将 Kafka 客户端配置为使用 StringSerializer/StringDeserializer。我假设我还需要以某种方式告诉 Spring Kafka 哪些标头映射为字符串以及使用什么字符编码。
我显然在这里遗漏了一些东西。有小费吗?
解决方案
将 binder 属性设置headerMapperBeanName
为 bean 的 bean 名称DefaultKafkaHeaderMapper
。
spring.cloud.stream.kafka.binder.headerMapperBeanName
KafkaHeaderMapper 的 bean 名称,用于将 spring-messaging 标头映射到 Kafka 标头和从 Kafka 标头映射。例如,如果您希望在
DefaultKafkaHeaderMapper
使用 JSON 反序列化的标头中自定义受信任的包,请使用此选项。
然后,您可以指定要由映射器将哪些标头映射为字符串:
/**
* Set the headers to not perform any conversion on (except {@code String} to
* {@code byte[]} for outbound). Inbound headers that match will be mapped as
* {@code byte[]} unless the corresponding boolean in the map value is true,
* in which case it will be mapped as a String.
* @param rawMappedHeaders the header names to not convert and
* @since 2.2.5
* @see #setCharset(Charset)
* @see #setMapAllStringsOut(boolean)
*/
public void setRawMappedHeaders(Map<String, Boolean> rawMappedHeaders) {
推荐阅读
- javascript - 如何组合多个 onclick 动作?
- sql - 消除 JOIN 列中的重复记录
- python-3.x - 与原始颜色相比,如何使 Canvas 小部件颜色更深?
- python - Django:使用 BASE_DIR 创建动态路径
- python - 使用 rpy2 导入 R 包
- javascript - Typescript模块导入以字符串形式而不是模块吐出路径
- docker - 如果还有 dockerfile 说明
- git - GitLab:远程访问被拒绝致命 - 身份验证失败
- javascript - 如何通过这个访问方法?
- xhtml - 当 w3.org 停止提供某些文件时,如何在命令行上使用 Xerces 验证 XHTML?