如果我有一个“Person”类型,并且它有多个字段,包括“密码”,那么我如何告诉 GSON 我想在输入时接受密码字段,而不是把它传回?
具体来说,在这种情况下,这是因为我的 Web 前端可以用于更新密码并将其发送到 Java 端,但我不想将密码发送回前端(出于明显的安全原因)。
您可以像往常一样反序列化您的类(因为您想反序列化所有字段)并编写一个不包括密码的自定义序列化程序。像这样的东西:
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 的豁免策略......
我不确定你可以用 Gson 做到这一点,但你可以用Genson。将 @JsonIgnore(deseriaize=true) 放在您的 getPassword 方法上。
或者,如果您希望 genson 仅使用字段而不是公共 getter/setter 和字段,请像这样配置它:
Genson genson = new Genson.Builder()
.setUseGettersAndSetters(false)
.setFieldVisibility(VisibilityFilter.DEFAULT)
.create();
在这种情况下,将注释放在字段上。