2017-05-05 8 views
1

을 @JsonIgnore 엔티티에서 Jackson이 기본 메서드 인 getSentenceForTitle()도 직렬화한다는 것을 알았습니다. 특정 경우에는 sentenceForTitle을 직렬화하지 않기를 바랍니다.잭슨 내가 기본 방법과 인터페이스를 상속 자바 8 기본 방법

Jackson에게 내가 기본 메서드를 직렬화하고 싶지는 않지만 해당 메서드의 동작을 유지하고 싶다는 것을 알리는 방법이 있습니까? 나는 기본 메서드를 재정 @JsonIgnore로 주석 및 기본 방법에 위임되어 함께했다 현재 해결 방법 :

@Entity 
public class JpaBook implements Book { 

    // ... 

    @Override 
    @JsonIgnore 
    public String getSentenceForTitle() { 
     return Book.super.getSentenceForTitle(); 
    } 

} 

그러나이 솔루션은 많은 기본 방법과 매우 자세한 오류가 발생하기 쉬운 인터페이스 얻을 수 있습니다.

답변

2

특정 방법/필드를 무시하려면 어떻게 든 지정해야하며 주석은이를 수행하는 가장 간단한 방법입니다. 나는 당신이 시도하는 것보다 간단 다음과 같은 옵션을 추천 할 수 있습니다 :

  1. 주석 기본 방법을 JpaBook 그것을 무시하지 않고. Book 그렇게 :

    @JsonIgnore 
    default String getSentenceForTitle() { 
        return "This book's title is " + getTitle(); 
    } 
    
  2. Book 만약 당신의 통제하에 있지 않거나 편리 지정하려는 필드 목록이있는 경우, 당신은 그대로 Book을 떠나 필드 또는 배열을 JpaBook 주석을 달 수 있습니다 무시할 필드 수 예컨대 :

    @JsonIgnoreProperties("sentenceForTitle") 
    class JpaBook implements Book { 
    

    또는

    @JsonIgnoreProperties({"sentenceForTitle", "alsoIgnoreThisField"}) 
    class JpaBook implements Book { 
    
  3. 당신은 또한 (JpaBook의) 모든 필드를 직렬화하고 모든 게터를 무시 JpaBook 주석을 달 수 있습니다. 당신은 * JPA에 엔티티 클래스 수준`(..) @ 내가 *`옵션과 함께 갔다,

    @JsonAutoDetect(fieldVisibility = ANY, getterVisibility = NONE) 
    class JpaBook implements Book { 
    
+0

최고 : Book 예컨대에서 작업을 수행 할 필요가 JsonIgnoreProperties하지 않습니다. 이 직렬화 측면을 직렬화 중심 클래스에 응집되게 유지하므로 가장 명확한 솔루션이라고 생각합니다. – Abdull