2014-02-14 6 views
2

Каков наилучший способ скрыть поле на модели в Dropwizard? (Если я хочу, чтобы иметь возможность десериализации поля через Джексон, но скрыть его, когда сериализация)Dropwizard скрывает поле в json

Например, если у меня есть следующие модели:

class User { 
    private String secret; 
    private String username; 
} 

Я хочу, чтобы иметь возможность создать пользователь с секретом, вызвав new ObjectMapper().readValue(), но я хочу скрыть секретное поле, когда оно сериализовано в JSON.

ответ

2

Добавить @JsonIgnore аннотации перед собственностью

Или вы можете добавить @JsonIgnoreProperties аннотации и указать поля, которые должны быть исключен

public class Foo{ 
    @JsonIgnore 
    private String bar; 
    ... 
} 

или

@JsonIgnoreProperties(value = { "bar" }) 
public class Foo { 
    private String bar; 

... 
} 

или если вы хотите игнорировать это поле только для сериализации, а не для десериализации, то

public class Foo{ 

    private String bar; 
    ... 
    @JsonIgnore 
    public String getBar(){ 
      return bar; 
    } 

    public void setBar(String bar){ 
      this.bar = bar; 
    } 
} 
+0

Хмм ... Добавление аннотации @JsonIgnore означает, что это поле полностью игнорируется Джексоном, что не является моим намерением. Я хочу все еще иметь возможность десериализовать поле (прочитайте его с JSON). Просто не хочу, чтобы он показывался во время сериализации. – etang

+0

, затем добавьте примечание @JsonIgnore только к методу геттера. Не по декларации поля. –

0

Если вы хотите скрыть это только во время seriazliation, добавьте @JsonIgnore аннотацию в собственность getter.

class User { 
    @JsonProperty 
    private String secret; 
    @JsonProperty 
    private String username; 
    @JsonIgnore 
    public String getSecret(){ 
     return secret; 
    } 
    public void setSecret(String secret){ 
     this.secret = secret; 
    } 
    ... 
} 
Смежные вопросы