代码之家  ›  专栏  ›  技术社区  ›  Arvind26

Camel-restlet/rest-dsl中的转义序列

  •  2
  • Arvind26  · 技术社区  · 6 年前

    骆驼路线-

    rest("/servicenow").post("/{operation}").consumes("application/json").type(Model.class).produces(MediaType.APPLICATION_JSON).to("direct:servicenow");
    from("direct:servicenow")
        .setHeader("operationSelector", simple("${header.operation}"))
        .process(new PreProcessor())
        .recipientList().simple("servicenow://${header.instance}?userName=${header.name}&password=${header.password}&apiUrl=${header.apiUrl}")
        .process(new PostProcessor());
    

    和后处理器类-

        Object msg = exchange.getIn().getBody();
    GsonBuilder builder = new GsonBuilder();
    builder.setLenient();
    Gson gson = builder.create();
    JsonElement element = gson.toJsonTree(msg);
    JsonObject result = new JsonObject();
    if (element.isJsonArray()) {
        JsonArray array = (JsonArray) element;
        result.add("result", array);
        System.out.println(result.toString());
        exchange.getOut().setBody(result.toString());
    } else {
        result.add("result", element);
        System.out.println(result.toString());
        exchange.getOut().setBody(result.toString());
    }
    

    返回客户端时,示例结果在JSON数组/对象中包含转义序列

    "{\"result\":[{\"parent\":\"\",\"made_sla\":\"true\",\"caused_by\":\"\"
    

    如果需要,请帮助修改restlet配置,以便在JSON响应中获得响应而不使用转义序列。

    1 回复  |  直到 6 年前
        1
  •  0
  •   rak007    6 年前

    不要使用此行:

    JsonObject result = new JsonObject();
    

    使用此首选答案:

    Map<DataType,DataType> result = new HashMap<DataType,DataType>();
    result.put("result", array);
    exchange.getOut().setBody(result);
    

    restlet将映射对象绑定到jsonObject。