我试图从一个包含LocalDate字段的类中创建一个JSON字符串,但总是得到这个错误:
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);
型
它甚至没有碰到serialize方法中的断点。我错过了什么吗?
2条答案
按热度按时间daolsyd01#
请参阅这篇关于堆栈溢出和相关讨论的文章:java.lang.reflect.InaccessibleObjectException:Unable to make field private final java.util.Map sun.reflect.annotation. Annotation异常
在您的情况下,您可以通过添加以下内容来解决此问题:
字符串
ldioqlga2#
对于 registerTypeAdapter 方法,使用 LocalDate 而不是 LocalDateTime。
字符串