首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring : JsonDeserializer没有选择TRUSTED_PACKAGE配置

Spring : JsonDeserializer没有选择TRUSTED_PACKAGE配置
EN

Stack Overflow用户
提问于 2020-03-07 22:10:31
回答 1查看 1K关注 0票数 1

我只想看看这是已知的行为还是我做错了什么。

我使用JsonDeserializer配置生产者和使用者的自定义类型映射。

消费者不能

代码语言:javascript
复制
org.apache.kafka.common.errors.SerializationException: Error deserializing key/value for partition ticket-1 at offset 1. If needed, please seek past the record to continue consumption.
Caused by: java.lang.IllegalArgumentException: The class 'createTicket' is not in the trusted packages: [java.util, java.lang]. If you believe this class is safe to deserialize, please provide its name. If the serialization is only done by a trusted source, you can also enable trust all (*).

消费工厂配置

代码语言:javascript
复制
props.put(JsonDeserializer.TRUSTED_PACKAGES, "*");
props.put(JsonDeserializer.TYPE_MAPPINGS, "createTicket:com.example.application.domain.command.CreateTicket, createTicketCommand:com.example.application.domain.command.CreateTicketCommand");

生产者工厂配置

代码语言:javascript
复制
props.put(JsonSerializer.TYPE_MAPPINGS,
              "createTicket:com.example.application.domain.command.CreateTicket, createTicketCommand:com.example.application.domain.command.CreateTicketCommand");

我用稳定版本和M3版本进行了测试。完全可运行的示例https://github.com/gAmUssA/spring-kafka-question-from-chat

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-07 23:30:23

问题是您实际上没有配置JsonDeserializer

JsonDeserializer.TYPE_MAPPINGS将直接传递给JsonDeserializer,而不是传递给ConsumerFactory。您的代码应该看起来像

代码语言:javascript
复制
        JsonDeserializer<Object> jsonDeserializer = new JsonDeserializer<>();
        Map<String, Object> deserProps = new HashMap<>();
        deserProps.put(JsonDeserializer.TYPE_MAPPINGS,
                "createTicket:com.example.application.domain.command.CreateTicket, createTicketCommand:com.example.application.domain.command.CreateTicketCommand");

//mind this `false` -- they have different modes for key and value deserializers
        jsonDeserializer.configure(deserProps, false);
        return new DefaultKafkaConsumerFactory<>(props, new StringDeserializer(),
                jsonDeserializer);

(在我的机器上,它工作时没有任何TRUSTED_PACKAGES设置)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60582666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档