Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheCamel返回带有转义字符的JSON_Java_Spring Boot_Apache Camel_Cxf_Dsl - Fatal编程技术网

Java ApacheCamel返回带有转义字符的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

我在camel中有一个rest服务,它引用另一个SOAP服务,SOAP响应进行POJO解组,然后对JSON对象进行封送。在控制台中,一切都很完美,但在服务的输出中,我看到了带有转义字符的字符串或字节数组

我试图返回一个JSONObject,Strings,Byte[],但是在这个过程中我遗漏了一些东西,我认为这将是json序列化的一个问题

     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)
将其转换为字符串,因此很明显您得到了一个字符串。还是我误解了什么?