【问题标题】:How to receive raw json string from Rabbit in Java without any modifications?如何在不进行任何修改的情况下从 Java 中的 Rabbit 接收原始 json 字符串?
【发布时间】:2020-07-10 06:46:55
【问题描述】:

我有一个配置了 RabbitMqListener 的 Spring Boot 应用程序。它必须接收以下格式的 JSON 数据:(显示示例)

{ "name" :"abc",  
"key" : "somekey",
"value" : {"data": {"notes": "**foo \u0026 bar"}}** 
}

此数据代表一些信息。它应该只用于只读处理,并且接收器 spring 应用程序应该按原样接收它(原始形式)。

我的意思是,如果我在 Spring 应用程序中断言 value 节点与在队列上发布的输入应该相等。

这根本就没有发生。 我总是在春季应用程序中获得价值 foo & bar 但我希望它是原始形式,而不需要与 \u 代码对话。

我尝试了几种方法,

  1. Jackaon2JsonMessage 转换器,
  2. 在 Rabbit 处理程序中将字节从 Message.getBody() - byte[] 传递到 mapper.readValue()
  3. 使用 JSON 简单的 gson 库

为什么在没有任何转换或翻译的情况下获取数据如此棘手。 我需要采用其他方法吗?

感谢任何帮助

【问题讨论】:

    标签: java json spring-boot jackson rabbitmq


    【解决方案1】:

    您是否尝试过在 ObjectMapper 上显式启用非 ascii 字符的转义?

    mapper.getFactory().configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true);
    

    【讨论】:

    • 感谢您的回复,但它不起作用.. btw JsonGenerator 已被弃用。我将映射器创建为: mapper=JsonMapper.builder().enable(JsonWriteFeature.ESCAPE_NON_ASCII).build()
    • 嗯,既然我再次阅读了您的问题,我认为您的问题出在反序列化器上,而不是序列化器上。这个答案对你有帮助吗? stackoverflow.com/a/46579378/546967
    • 在此处发布之前尝试过..它适用于那里给出的示例,但对于我发布的示例,\u00xx 字符嵌套在某处,它不起作用..可能是我需要调整一些东西..奇怪的是为什么内置的 JsonWriteFeature 不起作用..
    • JsonWriteFeature(或已弃用的JsonGenerator)是 JSON serializer 的设置,它负责将 Java 对象模型转换为 JSON。您的问题在于 deserializer,它负责将 JSON 转换为 Java 对象模型。不幸的是,等式的JsonReader 部分没有ESCAPE_NON_ASCII 等效项。我认为编写自定义 JsonDeserializer 可能是最好的方法。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2020-09-13
    • 2022-12-28
    • 2019-04-06
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    相关资源
    最近更新 更多