2017-12-15 18 views
2

私が扱っているjsonは、プロパティ名にアンダースコアを使用していますが、私はラクダのケースをJavaで保持したいと考えています。さらに私は不変のスタイルのPOJOを使用しています。これは私たちのチームが長い間採用してきたベストプラクティスです。不変なオブジェクトと不一致のプロパティ名を持つ@JsonPropertyアノテーションが重複しないようにするにはどうすればよいですか?

コンストラクタとゲッターに重複した@JsonPropertyアノテーションを入れても、すべてうまく動作しますが、これは不必要な膨大なものを追加します(私たちのクラスでは、数十のプロパティがあります)。 Javaプロパティー名をJSONプロパティー名に変換する方法を正確に1回ですか?

public class Foo { 

    public final String someProperty; 

    @JsonCreator 
    public Foo(@JsonProperty("some_property") someProperty) { 
     this.someProperty = someProperty; 
    } 

    @JsonProperty("some_property") 
    public String getSomeProperty() { 
     return someProperty; 
    } 
} 
+0

質問の一部ではありませんが、 'someProperty'コンストラクタパラメータの型が必要です。 – DwB

答えて

0

JSONに使用される命名規則を選択できます。この場合、SNAKE_CASEが必要です。 somePropertyフィールドを"some_property": "" JSONに変換します。次に、プロパティに@JsonPropertyは必要ありません。この場合

ObjectMapper mapper = new ObjectMapper(); 
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); 

、Fooの中で、あなたは、コンストラクタのparamsで@JsonPropertyを必要とするものを、コンストラクタ内のフィールドを提供する必要があります。

public class Foo { 

    public final String someProperty; 

    @JsonCreator 
    public Foo(@JsonProperty("some_property") String someProperty) { 
     this.someProperty = someProperty; 
    } 

    public String getSomeProperty() { 
     return someProperty; 
    } 
} 

は、少なくともあなたがの一つを取り除くことができます注釈。

0

不変オブジェクトの理解を深める。 セッターを使用しない場合でも、オブジェクトは変更できません。

public class Foo 
{ 
    @JsonProperty("some_property") 
    public String someProperty; 

    public String getSomeProperty() 
    { 
    return someProperty; 
    } 

    @Override 
    public String toString() 
    { 
     return ToStringBuilder.reflectionToString(
      this, 
      ToStringStyle.SHORT_PREFIX_STYLE); 
    } 
} 
関連する問題