11

私は依存関係を使用しています:

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

次のオブジェクトがあります。

public Class X {

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

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

また、クラス X のコンテンツを再帰的にログに記録して、クラス Y も取得し、JSON スタイルを使用する必要があります。それが私の目標であり、これがこの質問の目的です。

アプローチ 1:

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

アプローチ 1 の結果:

{"a":"<a>","b":"<b>","y": com.<packages>.y@<hash>}

アプローチ 2:

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

アプローチ 2 の結果:

[com.<packages>.x@<hash>[a=<a>,b=<b>,y=com.<packages>.y@<hash>[c=<c>,d=<d>]]

成功したアプローチ:

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

成功したアプローチの結果 (私の目標):

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

3 に答える 3

4

解決策を見つけました。それぞれのメソッドが必要Overrideです(この場合は)toStringclassesXY

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);
  }
}

そして今、アプローチ 1 で動作しています。

于 2015-11-06T12:13:30.213 に答える