如果我有一個「Person」類型,並且它有多個字段,包括「password」,那麼如何告訴GSON我想接受密碼字段當它通過時,但不會將其傳回?GSON序列化 - 如何從序列化中排除某些字段,但不是反序列化
具體而言,在這種情況下,這是因爲我的web前端可用於更新密碼並將其發送到Java端,但我從不想將密碼發送回前端(出於明顯的安全原因)。
如果我有一個「Person」類型,並且它有多個字段,包括「password」,那麼如何告訴GSON我想接受密碼字段當它通過時,但不會將其傳回?GSON序列化 - 如何從序列化中排除某些字段,但不是反序列化
具體而言,在這種情況下,這是因爲我的web前端可用於更新密碼並將其發送到Java端,但我從不想將密碼發送回前端(出於明顯的安全原因)。
我不確定你可以用Gson做,但你可以用Genson。將@JsonIgnore(deseriaize = true)放在getPassword方法上。
或者,如果你想genson只使用領域而不是公共的getter/setter和領域,配置它這樣的:
Genson genson = new Genson.Builder()
.setUseGettersAndSetters(false)
.setFieldVisibility(VisibilityFilter.DEFAULT)
.create();
在這種情況下,把註釋在球場上。
您可以像往常一樣反序列化您的類(因爲您想要反序列化所有字段)並編寫排除密碼的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 ...