如何避免在链中的每个微服务上转义 /n? Java

How to avoid escaping /n on each microservice in the chain? Java

例如,我们从我们的合作伙伴那里收到了这样一条 json 消息:

{
"message": "Dear client,\nWe'd like to offer you.."
}

合作伙伴希望客户端收到这样的消息(没有换行但有\n

Dear client,\nWe'd like to offer you

但是我们的生态系统中有一个微服务链,json 在客户端可以获取它之前通过 4 或 5 个微服务对其进行处理。因此,我们的合作伙伴应该给我们 \\\\n 而不是 \n,以便客户在结果中得到 \n。但我想知道,在源消息中添加 8 个反斜杠来为每个微服务转义“\n”是解决此问题的唯一方法。我认为这不是很好的解决方案,因为如果链中的微服务数量发生变化,我们必须更改源消息(此外,如果链中的微服务数量开始动态变化,我们将面临问题)?有没有办法在源消息(来自合作伙伴)中使用 \n 而无需在我们的微服务中将每个 \n 替换为 \n

有一个我如何在其中一个微服务中处理 json 的示例:

private String replace(String sourceJson, List<String> properties, DocumentContext context) {
    StringBuilder stringBuilder = new StringBuilder(sourceJson);

    for (String property : properties) {
        String newValue = Pattern.compile("ABC")
                .matcher(stringBuilder)
                .replaceAll(context.read(property, String.class));
        stringBuilder.replace(0, stringBuilder.length(), newValue);
    }
    return stringBuilder.toString();
}

下面是一个创建 JSON 对象的示例,将其转换为 String,然后再转换回 JsonObject,添加 属性,然后再次将其转换回 String。

package org.example;

import com.google.gson.Gson;
import com.google.gson.JsonObject;

public class App {
    public static void main(String[] args) {
        JsonObject o = new JsonObject();
        o.addProperty("message","foo\nbar");
        Gson gson = new Gson();
        String stringRep = gson.toJson(o);
        System.out.println(stringRep);
        JsonObject o2 = gson.fromJson(stringRep, JsonObject.class);
        o2.addProperty("newProp", 42);
        String messageValue = o2.get("message").getAsString();
        System.out.println(messageValue);
        String newMessageValue = messageValue.replace("foo", "baz");
        o2.addProperty("message", newMessageValue);
        stringRep = gson.toJson(o2);
        System.out.println(stringRep);
    }
}

这个程序的输出是:

{"message":"foo\nbar"}
foo
bar
{"message":"baz\nbar","newProp":42}

所以你可以看到字符串的 Java 表示包含换行符,但是 JSON 表示包含字符序列 '\', 'n'.

你需要的maven依赖是:

    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.9</version>
    </dependency>