首页 > 解决方案 > 消息在发送到 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的消息中的?

标签: javaspring-bootjmsibm-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。


推荐阅读