Java GSON 在自定义序列化程序中转义反斜杠

Java GSON Escaping backslashes in a custom serializer

我需要将 Java LocalDate(例如 2020-02-04)序列化为以下格式: "myProperty":"\/Date(-2209165200000+0100)\/",因为我们使用的界面要求该格式。 我们目前使用的是最新版本的 GSON (2.8.6)

我们的自定义 LocalDate Serializer 目前看起来像这样:

public class LocalDateSerializer implements JsonSerializer<LocalDate> {

  @Override
    public JsonElement serialize(LocalDate src, Type typeOfSrc, JsonSerializationContext context) {
        Instant instant = src.atStartOfDay(ZoneId.systemDefault()).toInstant();
        long timeInMillis = instant.toEpochMilli();
        ZoneOffset offset = OffsetDateTime.now().getOffset();
        return context.serialize("\/Date(" + timeInMillis + offset + ")\/");
    }
}

现在的问题是,据我所知,context.serialize 函数转义了双反斜杠,所以最终结果是 "myProperty":"\/Date(-2209165200000+0100)\/" 而不是 "myProperty":"\/Date(-2209165200000+0100)\/" 在 Java 1.8 中,您不能简单地使用像 "\/" 这样的字符串,因为这会导致编译器错误。

有什么简单的方法可以用单反斜杠得到我们的结果吗?

谢谢和亲切的问候:)

马可

RFC 7159 中所述,\/ 表示转义的正斜杠并解码为 \

因此,您想 return context.serialize("/Date(" + timeInMillis + offset + ")/");

我们通过返回一个新的 JsonPrimitive 而不是使用 context

来解决我们的问题

所以我们现在正在使用 return new JsonPrimitive("/Date(" + timeInMillis + offset + ")/");,现在一切正常。仍然感谢您的意见,非常感谢!