gpt4 book ai didi

java - GSON 没有为作为接口(interface)的类型调用我的 TypeAdapter

转载 作者:IT老高 更新时间:2023-10-28 12:49:43 27 4
gpt4 key购买 nike

GSON 似乎在使用某种技巧,它查看我的 JavaBeans 的内部字段,而不是使用可公开访问的属性信息。不幸的是,这对我们来说是行不通的,因为我们神奇地创建的 bean 充满了我不希望它存储的私有(private)字段。

@Test
public void testJson() throws Exception
{
Player player = new MagicPlayer(); //BeanUtils.createDefault(Player.class);
player.setName("Alice");

Gson gson = new GsonBuilder()
.registerTypeAdapter(Player.class, new PlayerTypeAdapter())
.create();

System.out.println(gson.toJson(bean));
}

private static class PlayerTypeAdapter implements JsonSerializer<Player>
{
@Override
public JsonElement serialize(Player player, Type type,
JsonSerializationContext context)
{
throw new RuntimeException("I got called, woohoo");
}
}

public static interface Player //extends SupportsPropertyChanges
{
public String getName();
public void setName(String name);
}

// Simple implementation simulating what we're doing.
public static class MagicPlayer implements Player
{
private final String privateStuff = "secret";
private String name;

@Override
public String getName()
{
return name;
}

@Override
public void setName(String name)
{
this.name = name;
}
}

这给出了:

{"privateStuff":"secret","name":"Alice"}

当然,永远不要调用我的类型适配器,这似乎使得无法获得任何其他行为。

最佳答案

我在 Gson 的 2.3.1 版本中遇到了同样的问题。我通过使用得到它的工作

.registerTypeHierarchyAdapter(Player.class, new PlayerTypeAdapter())

而不是

.registerTypeAdapter(Player.class, new PlayerTypeAdapter())

关于java - GSON 没有为作为接口(interface)的类型调用我的 TypeAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10631250/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com