2015-11-06 13 views
7

-lang3 müşterekleri kullanarak sahip Nasıl:RecursiveToStringStyle ve JSON_STYLE ben bağımlılığı kullanıyorum

<dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-lang3</artifactId> 
     <version>3.4</version> 
    </dependency> 

Aşağıdaki nesneler vardır:

public Class X { 

    private String a; 
    private String b; 
    private Y y; 
} 

public Class Y { 
    private String c; 
    private String d; 
} 

Ve derse X içeriğini giriş yapmanız Y'yi de almak ve JSON stilini kullanarak yinelemeli olarak. Bu benim amacım ve bu sorunun amacı.

Yaklaşım 1:

ToStringStyle style = ToStringStyle.JSON_STYLE; 
LOGGER.debug(ReflectionToStringBuilder.toString(new X(), style, false, false)); 

Yaklaşım 1 sonuç:

{"a":"<a>","b":"<b>","y": com.<packages>[email protected]<hash>} 

yaklaşım 2:

RecursiveToStringStyle style = new RecursiveToStringStyle(); 
LOGGER.debug(ReflectionToStringBuilder.toString(new X(), style, false, false)); 

yaklaşım 2 sonuç:

[com.<packages>[email protected]<hash>[a=<a>,b=<b>,y=com.<packages>[email protected]<hash>[c=<c>,d=<d>]] 

Başarılı Yaklaşım:

`Merge of Approach 1 and Approach 2` but how to achieve this? 

Başarılı Yaklaşım sonucu (Amacım):

{"a":"<a>","b":"<b>","y":{"c":"<c>","d":"<d>"}} 
+0

Dosya gönderebileceğiniz bir özellik isteği gibi geliyor ... Mevcut MultilineRecursiveToStringStyle'ye benzer bir RecursiveToStringStyle alt sınıfı olarak uygulanabilir. – Thilo

+0

Evet, bu yaklaşımı zaten denedim. Ama bence hedefe ulaşmak için daha iyi bir yol olmalı. Belki başka bir bağımlılık kullanıyor? – Leonel

cevap

1

çözüm bulundu. Ben Onun çalışma yaklaşımı 1 ile şimdi (bu durumda X ve Y) her classes yöntemi toStringOverride

public Class X { 

    private String a; 
    private String b; 
    private Y y; 

    @Override 
    public String toString() { 
    return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE); 
    } 
} 

public Class Y { 
    private String c; 
    private String d; 

    @Override 
    public String toString() { 
    return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE); 
    } 
} 

Ve gerekir.

+0

Eğer thilo katılıyor musunuz? – Leonel

+0

Elbette, tüm ilgili sınıfların "toString" yöntemlerini değiştirebilirseniz, bu işe yarar. ToStringBuilder ile ilgili güzel şey, dış olabileceği. Ama neden gerekli olandan daha karmaşık şeyler yapsın? – Thilo

İlgili konular