首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何避免在链中的每个微服务上逃避/n?Java

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

Stack Overflow用户
提问于 2021-12-23 11:27:15
回答 1查看 70关注 0票数 0

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

代码语言:javascript
运行
复制
{
"message": "Dear client,\nWe'd like to offer you.."
}

合作伙伴希望客户端接收这样的消息(没有换行符,但使用\n)。

代码语言:javascript
运行
复制
Dear client,\nWe'd like to offer you

但是我们的生态系统中有一条微服务链,json要经过4到5个微服务,然后客户才能得到它。因此,我们的合作伙伴应该给我们\\\\\\\\n而不是\n,以便客户端在结果中得到\n。但是,我想知道,在源消息中添加8个反斜杠来为每个微服务转义"\n“是解决这个问题的唯一方法。我认为这不是一个很好的解决方案,因为如果链中的微服务计数发生变化,我们必须改变源消息(而且,如果链中的微服务计数开始动态变化,我们将面临问题)?有没有办法在源消息(来自合作伙伴)中使用\n,而不用在我们的微服务器中用\\n替换每个\n

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

代码语言:javascript
运行
复制
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();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-23 12:04:24

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

代码语言:javascript
运行
复制
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);
    }
}

该程序的输出是:

代码语言:javascript
运行
复制
{"message":"foo\nbar"}
foo
bar
{"message":"baz\nbar","newProp":42}

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

您需要的maven依赖项是:

代码语言:javascript
运行
复制
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.9</version>
    </dependency>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70461516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档