Java ApacheCamel返回带有转义字符的JSON
我在camel中有一个rest服务,它引用另一个SOAP服务,SOAP响应进行POJO解组,然后对JSON对象进行封送。在控制台中,一切都很完美,但在服务的输出中,我看到了带有转义字符的字符串或字节数组 我试图返回一个JSONObject,Strings,Byte[],但是在这个过程中我遗漏了一些东西,我认为这将是json序列化的一个问题Java ApacheCamel返回带有转义字符的JSON,java,spring-boot,apache-camel,cxf,dsl,Java,Spring Boot,Apache Camel,Cxf,Dsl,我在camel中有一个rest服务,它引用另一个SOAP服务,SOAP响应进行POJO解组,然后对JSON对象进行封送。在控制台中,一切都很完美,但在服务的输出中,我看到了带有转义字符的字符串或字节数组 我试图返回一个JSONObject,Strings,Byte[],但是在这个过程中我遗漏了一些东西,我认为这将是json序列化的一个问题 JacksonDataFormat jacksonDataFormat = new JacksonDataFormat(); jackso
JacksonDataFormat jacksonDataFormat = new JacksonDataFormat();
jacksonDataFormat.setPrettyPrint(true);
from("direct:spliting")
.log("Start Spliting")
.setBody(xPath)
.log("Split: ${body}")
.unmarshal(new CustomUnmarshall())
.marshal(jacksonDataFormat)
.convertBodyTo(String.class)
.setHeader("Content-Type", simple("application/json"))
.removeHeader("ResponseContext")
.log("Marshal: ${body}")
.end();
在控制台中,结果正常:
{"def":null,"v":{"a":4877,"c":1},"sa":[{"kv":[{"ar":null,"v":["C000000002"],"k":"campaignCode"},{"ar":null,"v":["0.75"],"k":"propension"},{"ar":null,"v":["ATM"],"k":"canal"}, ...
但《邮差》对此的回应是:
"{\r\n \"sa\" : [ {\r\n \"kv\" : [ {\r\n \"k\" : \"campaignCode\",\r\n \"v\" : [ \"C000000001\" ],\r\n \"ar\" : null\r\n }, {\r\n \"k\" : \"propension\",\r\n \"v\" : [ \"0.5\" ],\r\n \"ar\" : null\r\n }, {\r\n \"k\" : \"canal\",\r\n \"v\" : [ \"Sucursal\" ],\r\n \"ar\" : null\r\n }, {\r\n \"k\" : \"offerCode\",\r\n
我真的不觉得这有什么问题。邮递员输出是一个JSON,封送为字符串。这就是你在路上要做的 由于您有
setPrettyPrint(true)
字符串中有很多CR-LF(行分隔符)。如果禁用“漂亮打印”,则可以将其清除
查看此Jackson marshal/unmarshal(带和不带漂亮打印),将格式与结果进行比较
当您使用Jackson方法时,也会得到这样的JSON字符串(带有转义双引号等)
objectMapper.writeValueAsString(yourJson);
将bindingMode选项设置为“off”修复了通过camel-rest提供服务时转义JSON字符串的问题。也许这会有所帮助(示例没有显示如何将数据提供给邮递员)。感谢您的回复,我尝试了一下,但我得到了这个响应,它是一个字符串,而不是json对象:好吧,您可以使用
.convertBodyTo(string.class)
将其转换为字符串,因此很明显您得到了一个字符串。还是我误解了什么?