首页 > 解决方案 > Java GSON在自定义序列化程序中转义反斜杠

问题描述

我需要将 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函数转义了双反斜杠,因此最终结果是And 在 Java 1.8"myProperty":"\\/Date(-2209165200000+0100)\\/""myProperty":"\/Date(-2209165200000+0100)\/" ,您不能简单地使用 String like "\/",因为这将导致编译器错误.

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

谢谢和亲切的问候:)

马可

标签: javajsonserializationgsonescaping

解决方案


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

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


推荐阅读