第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Jackson 2:僅在序列化時忽略瞬態(tài)字段

Jackson 2:僅在序列化時忽略瞬態(tài)字段

Helenr 2023-11-10 15:49:39
我在 JAX-RS 應(yīng)用程序中使用 Jackson v2,并且試圖弄清楚是否可以配置“ObjectMapper”以刪除帶有瞬態(tài)修飾符的字段,但僅限于序列化期間。這是一個 DTO 來說明我的用例(省略了 getter 和 setter)public class User {     private String email;         private transient String password; }考慮到上述 DTO,我希望有一個對象映射器,它在序列化時刪除密碼字段,并在反序列化期間包含它。我能找到的關(guān)于瞬態(tài)的唯一信息是:MapperFeature.PROPAGATE_TRANSIENT_MARKER但該配置與我的要求不相關(guān)。PS - 不使用注釋,因為 DTO 不耦合到任何庫,而且我不一定可以控制它們。
查看完整描述

1 回答

?
長風秋雁

TA貢獻1757條經(jīng)驗 獲得超7個贊

不知道,看起來像transient屬性修飾符加上PROPAGATE_TRANSIENT_MARKER就可以了。反序列化是直接的。不過,在序列化過程中,瞬態(tài)標記有些麻煩。您需要為字段提供 getter,否則您將遇到異?!盁o法識別的字段...未標記為可忽略”。

為了滿足額外的要求,我添加了一個使用 jackson mixins 的版本。請注意,mixin 版本生成帶有空密碼字段的 json,而 PROPAGATE_TRANSIENT_MARKER 版本根本不生成任何字段。

PROPAGATE_TRANSIENT_MARKER 版本

public class SerializeDeserializeAttributes {

? ? private final ObjectMapper mapper = new ObjectMapper();


public <T> T fromJson(String json, Class<T> c) throws IOException {

? ? synchronized (mapper) {

? ? ? ? mapper.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, false);

? ? ? ? return mapper.readValue(json, c);

? ? }

}


public String toJson(Object o) throws JsonProcessingException {

? ? synchronized (mapper) {

? ? ? ? mapper.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true);

? ? ? ? return mapper.writeValueAsString(o);

? ? }

}


? ? private static final String jsonFull = "{\"name\":\"A\",\"email\":\"a@a\",\"password\":\"a\",\"width\":1,\"height\":1}";

? ? private static final String jsonPartial = "{\"name\":\"A\",\"email\":\"a@a\",\"width\":1,\"height\":1}";

? ? private static final User user = new User("A", "a@a", "a", 1, 1);


? ? @Test

? ? public void serializeDeserialize() throws IOException {

? ? ? ? assertEquals(user, fromJson(jsonFull, User.class));

? ? ? ? assertEquals(jsonPartial, toJson(user));

? ? ? ? assertEquals(user, fromJson(jsonFull, User.class));

? ? ? ? assertEquals(jsonPartial, toJson(user));

? ? }

}

Mixin version


public class SerializeDeserializeAttributesMixin {


? ? public abstract class UserMixin {

? ? ? ? @JsonSerialize(using = PwdSerializer.class)

? ? ? ? transient String password;

? ? }


? ? static class PwdSerializer extends StdSerializer<String> {


? ? ? ? public PwdSerializer() {

? ? ? ? ? ? this(String.class);

? ? ? ? }


? ? ? ? private PwdSerializer(Class<String> t) {

? ? ? ? ? ? super(t);

? ? ? ? }


? ? ? ? @Override

? ? ? ? public void serialize(String s, JsonGenerator jg, SerializerProvider sp) throws IOException {

? ? ? ? ? ? jg.writeString("");

? ? ? ? }

? ? }


? ? private static final String jsonFull = "{\"name\":\"A\",\"email\":\"a@a\",\"password\":\"a\",\"width\":1,\"height\":1}";

? ? private static final String jsonPartialMixin = "{\"name\":\"A\",\"email\":\"a@a\",\"password\":\"\",\"width\":1,\"height\":1}";

? ? private static final User user = new User("A", "a@a", "a", 1, 1);

? ? private static final ObjectMapper mapperMixin = new ObjectMapper();


? ? static {

? ? ? ? mapperMixin.addMixIn(User.class, UserMixin.class);

? ? }



? ? @Test

? ? public void serializeDeserializeUsingMixin() throws IOException {

? ? ? ? assertEquals(user, mapperMixin.readValue(jsonFull, User.class));

? ? ? ? assertEquals(jsonPartialMixin, mapperMixin.writeValueAsString(user));

? ? }


}

那是用戶類。


class User {

? ? private String name;

? ? private String email;

? ? private transient String password;

? ? private int width;

? ? private int height;


? ? public User() {

? ? }


? ? User(String name, String email, String password, int width, int height) {

? ? ? ? this.name = name;

? ? ? ? this.email = email;

? ? ? ? this.password = password;

? ? ? ? this.width = width;

? ? ? ? this.height = height;

? ? }


? ? public String getName() {

? ? ? ? return name;

? ? }


? ? public String getEmail() {

? ? ? ? return email;

? ? }


? ? public String getPassword() {

? ? ? ? return password;

? ? }


? ? public int getWidth() {

? ? ? ? return width;

? ? }


? ? public int getHeight() {

? ? ? ? return height;

? ? }


? ? @Override

? ? public boolean equals(Object o) {

? ? ? ? if (this == o) return true;

? ? ? ? if (o == null || getClass() != o.getClass()) return false;

? ? ? ? User user = (User) o;

? ? ? ? return Float.compare(user.width, width) == 0 &&

? ? ? ? ? ? ? ? Float.compare(user.height, height) == 0 &&

? ? ? ? ? ? ? ? Objects.equals(name, user.name) &&

? ? ? ? ? ? ? ? Objects.equals(email, user.email) &&

? ? ? ? ? ? ? ? Objects.equals(password, user.password);

? ? }


? ? @Override

? ? public int hashCode() {

? ? ? ? return Objects.hash(name, email, password, width, height);

? ? }


? ? @Override

? ? public String toString() {

? ? ? ? return "User{" +

? ? ? ? ? ? ? ? "name='" + name + '\'' +

? ? ? ? ? ? ? ? ", email='" + email + '\'' +

? ? ? ? ? ? ? ? ", password='" + password + '\'' +

? ? ? ? ? ? ? ? ", width=" + width +

? ? ? ? ? ? ? ? ", height=" + height +

? ? ? ? ? ? ? ? '}';

? ? }

}



查看完整回答
反對 回復(fù) 2023-11-10
  • 1 回答
  • 0 關(guān)注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號