如果我有一个类型“Person”,并且它有多个字段,包括“password”,那么如何告诉GSON我希望在传入密码字段时接受密码字段,而不是将密码字段传回去? / p>
具体来说,在这种情况下,这是因为我的Web前端可用于更新密码并将其发送到Java端,但我绝不想将密码发送回前端(出于明显的安全原因)
答案 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 ......