2016-05-06 5 views
1

У меня есть следующий абстрактный класс:Override @JsonIgnore в подклассе

public abstract class StandardTimeStamp { 

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(nullable = false) 
    @JsonIgnore 
    private Date lastUpdated; 

    @PreUpdate 
    public void generatelastUpdated() { 
    this.lastUpdated = new Date(); 
    } 

    public Date getLastUpdated() { 
    return lastUpdated; 
    } 

    public void setLastUpdated(Date lastUpdated) { 
    this.lastUpdated = lastUpdated; 
    } 
} 

У меня есть объект, который является подклассом, в котором мне нужно lastUpdate значение для отправки в браузер, так что мне нужно переопределить @JsonIgnore. Я попробовал несколько вещей, следующий код является одним из них:

public class MyEntity extends StandardTimestamp implements Serializable { 

    @Column(name = "LastUpdated") 
    private Date lastUpdated; 

    @JsonIgnore(false) 
    @Override 
    public Date getLastUpdated() { 
    return lastUpdated; 
    } 
} 

Это добавить LastUpdated атрибут в ответ JSON, однако его значение равно нулю, когда оно не равно нулю в базе данных. У меня есть другие Даты в подклассе, которые работают, но они не скрыты с @IgnoreJson в суперклассе.

Любые мысли?

ответ

4

Вы введение второго поля с именем lastUpdated с этой декларацией

@Column(name = "LastUpdated") 
private Date lastUpdated; 

в вашем подтипе MyEntity. Я не уверен, как обработчик базы данных справляется с этим, но он кажется лишним для меня.

Я вижу два варианта.

Один, избавитесь от этого нового поля и попросите его переопределить getLastUpdated. Например

@Override 
@JsonIgnore(false) 
@JsonProperty 
public Date getLastUpdated() { 
    return super.getLastUpdated(); 
} 

При сериализации MyEntity объекта, Джексон обнаружить одно свойство через этот аксессор, lastUpdated, и использовать его для создания JSON. Это приведет к извлечению его из суперкласса.

Два, использовать класс аннотацию @JsonIgnoreProperties отметить игнорированные свойства суперкласса

@JsonIgnoreProperties("lastUpdated") 
abstract class StandardTimeStamp { 

то четкие (или добавить различные значения), что «список» в подклассе

@JsonIgnoreProperties() 
class MyEntity extends StandardTimeStamp implements Serializable { 

Джексон будет использовать только аннотацию в подклассе, если она присутствует, и игнорировать аннотацию на суперкласс.

+0

Это работает, однако я все еще получаю null в атрибуте JSON на интерфейсе, но я думаю, что это на стороне базы данных. Я буду продолжать изучать это. Спасибо за отличный ответ! :) –

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