Java LocalDate 和 Gson 序列化器 - InaccessibleObjectException

问题描述 投票:0回答:1

我试图从包含 LocalDate 字段的类中创建一个 JSon-String,但我总是收到此错误:

Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private final int java.time.LocalDate.year accessible: module java.base does not "opens java.time" to unnamed module @197ac685

我已经搜索过这个,显然我应该注册一个自定义适配器,我做到了:

public class GsonLocalDateAdapter implements JsonSerializer<LocalDate>, JsonDeserializer<LocalDate> {

private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");


@Override
public LocalDate deserialize(final JsonElement json, final Type typeOfT,
                             final JsonDeserializationContext context) throws JsonParseException {
    return LocalDate.parse(json.getAsString(), formatter);
}

@Override
public JsonElement serialize(LocalDate src, Type typeOfSrc, JsonSerializationContext context) {
    return new JsonPrimitive(src.format(formatter));
}
}

var gson = new GsonBuilder()
            .registerTypeAdapter(LocalDateTime.class, new GsonLocalDateAdapter())
            .create();
    var json = gson.toJson(myObject);

它甚至没有到达序列化方法中的断点。 我是不是错过了什么?

java gson
1个回答
0
投票

请参阅这篇关于堆栈溢出的文章以及相关讨论: java.lang.reflect.InaccessibleObjectException:无法将字段设为私有最终 java.util.Map sun.reflect.annotation.AnnotationInvocalHandler

在您的情况下,您可以通过添加以下内容来解决此问题:

JAVA_TOOL_OPTIONS=--add-opens=java.base/java.time=ALL-UNNAMED
© www.soinside.com 2019 - 2024. All rights reserved.