发送给MQ的消息中包含转义字符,转换为JSON时出现异常
Message contains escape character in the message sent to MQ and cause exception when converting to 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 消息时(使用 Spring Boot with JMS),转义字符 \
出现,导致错误。我试着做 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.
我有一个方法:
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 消息时(使用 Spring Boot with JMS),转义字符 \
出现,导致错误。我试着做 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.