2015-04-09 3 views
0

Допустим, у меня есть POJO как:Джексон пользовательских сериализация геттер

public class User { 
    private Long id; 
    private String username; 

    // usual getters and setters 
    .... 

    // only for serialisation purposes 
    public String getUpperUsername() { 
     return this.id % 2 == 0 ? username : username.toUpperCase(); 
    } 


} 

Я хотел бы сделать условный сериалайзер так что serialises другого значения, что фактический один, если некоторые условия.

Я посмотрел на @JsonGetter, но, судя по всему, он устарел, @JsonProperty, похоже, не работает.

У вас есть идея?

Спасибо заранее :)

+1

Вы можете сказать, почему @JsonProperty не работает для вас, он работает для меня ... см. Мой ответ – macias

+0

'@ JsonGetter' был просто псевдонимом для' @ JsonProperty', поэтому он должен работать аналогичным образом. – StaxMan

ответ

2

Вы могли бы попытаться написать пользовательский сериализатор реализацию JsonSerializer и используя @JsonSerialize тогда: http://www.baeldung.com/jackson-custom-serialization
Но это кажется излишним.

Также, если это приемлемо, вы можете попытаться поместить логику getUpperUsername() в обычный getter.

PS: Странно, что @JsonProperty не работает, он соответствует здесь.

3

@JsonProperty работает на самом деле для меня, когда я использую его так:

public class User { 
     private Long id; 
     private String username; 

     public Long getId() { 
     return id; 
     } 

     public void setId(Long id) { 
     this.id = id; 
     } 

     public String getUsername() { 
     return username; 
     } 

     public void setUsername(String username) { 
     this.username = username; 
     } 

     @JsonProperty("username") 
     public String getUppercaseUsername() { 
     return this.id % 2 == 0 ? username : username.toUpperCase(); 
     } 
} 

См тестовый пример here.

Вы также можете использовать специальный сериализатор, например here, если вы хотите отделить эту логику верхнего регистра от самой сущности.

Правда, дело в том, что это бизнес-логика, которая не должна обрабатываться сериализатором - это неудача дизайна. Вместо этого укажите имя пользователя в другом месте и используйте Джексон только для сериализации - это цель этой библиотеки.

+0

Я пробовал точно то же самое, но ничего не делал. Может быть, я развернул старое ухо или что-то такое глупое ... Спасибо, много масиас :) – user3159152

Смежные вопросы