GSON序列化 - 如何从序列化中排除某些字段,但不反序列化

时间:2013-10-12 19:07:23

标签: java json gson

如果我有一个类型“Person”,并且它有多个字段,包括“password”,那么如何告诉GSON我希望在传入密码字段时接受密码字段,而不是将密码字段传回去? / p>

具体来说,在这种情况下,这是因为我的Web前端可用于更新密码并将其发送到Java端,但我绝不想将密码发送回前端(出于明显的安全原因)

2 个答案:

答案 0 :(得分:0)

我不确定你能用Gson做到这一点,但你可以使用Genson。将@JsonIgnore(deseriaize = true)放在你的getPassword方法上。

或者,如果您希望genson仅使用字段而不是公共getter / setter和字段,请按以下方式配置:

Genson genson = new Genson.Builder()
      .setUseGettersAndSetters(false)
      .setFieldVisibility(VisibilityFilter.DEFAULT)
      .create();

在这种情况下,将注释放在字段上。

答案 1 :(得分:0)

您可以像往常一样反序列化您的类(因为您要反序列化所有字段)并编写一个排除密码的custom serializer。像这样:

public class PersonSerializer implements JsonSerializer<Person> {

  @Override
  public JsonElement serialize(Person src, Type typeOfSrc, JsonSerializationContext context)
  {
    JsonObject obj = new JsonObject();
    obj.addProperty("name", src.name);
    obj.addProperty("gender", src.gender);
    obj.addProperty("age", src.age);
    //And all the other fields but the password...

    return obj;
  }
}

然后你只需要注册序列化器:

GsonBuilder gson = new GsonBuilder();
gson.registerTypeAdapter(Person.class, new PersonSerializer());

最后使用gson.toJson方法...

照常序列化您的对象

我不确定这是否是最好的方法,但它非常简单......否则你可以看看Gson's excusion strategies ......