java - 消息在发送到 MQ 的消息中包含转义字符,并在转换为 JSON 时导致异常
问题描述
我有一个方法:
public void sendMessage(MyJobDTO myJobDTO) {
jmsTemplate.send(new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
TextMessage message = null;
message = session.createTextMessage(myJobDTO.toString());
logger.info("Sending message...");
logger.info(message);
return message;
}
});
}
和我的 DTO 的 toString():
@Override
public String toString() {
return "{" +
"\"A\":" + "\"" + prop_a + "\"," +
"\"B\":" + "\"" + prop_b + "\"," +
"\"C\":" + "\"" + prop_c + "\"" +
"}";
}
我意识到当其他应用程序收到 MQ 消息(使用带有 JMS 的 Spring Boot)时,\
出现了转义字符,导致错误。我试图这样做,replaceAll("\\\\", "")
但它找不到任何可以替换的东西。我怎样才能摆脱\
发送到MQ的消息中的?
解决方案
处理此问题的简洁方法是使用适当的 JSON 库来创建 JSON 字符串。例如,使用org.json
库 ( javadoc )。
public String toString()
JSONObject jo = new JSONObject();
jo.put("A", propA);
jo.put("B", propB);
jo.put("C", propC);
return jo.toString();
}
propA
如果有必要,这将转义等值。结果将是格式良好的 JSON。
推荐阅读
- navigation - 如何通过 blazor 中的链接导航到同一页面中的部分或段落?
- asynchronous - 任务可以在串行队列上异步执行吗?
- python - Tkinter - 如何删除按钮图片的白色背景以及一般情况
- c# - Emgu.cv DetectorParameters.GetDefault() 返回 System.AccessViolationException
- select - 使用 addInputArea 引导 SelectPicker
- python - 如何通过 lambda 函数从列表中生成 n 个连续元素?
- python - 尝试比较值时python pandas中的关键错误
- c# - 当您的基本模型不是列表类型时,如何在 ASP.NET MVC 中编写列表?
- visual-studio-code - VSCode 调试器存在字符编码问题
- c++ - VS Code G++ 智能感知设置不起作用且编译器未运行完成