2017-08-23 2 views
2

私はこのようなエンティティのポストエンドポイントと春ブートプロジェクトを持っている:ジャクソン準備コレクションのみ

class Task{ 
    @JoinTable(name = "task_user", 
     joinColumns = arrayOf(JoinColumn(name = "task_id")), 
     inverseJoinColumns = arrayOf(JoinColumn(name = "user_id"))) 
@ManyToMany 
var users: MutableSet<User> = HashSet() 
} 

私は、人々が仕事を持つユーザーを投稿できるようにしたいが、@JsonProperty(アクセスしないでください= READ_ONLY)はコレクションでは動作しないようですので、存在するIDを指定すると、それらはタスクにアタッチされます。同様の方法でコレクションを行うことができるかどうかは誰にも分かります。カスタムデシリアライザを使用して行われますか?)

+1

@JsonIgnoreProperties(value = "users", allowGetters=true) class Task { @ManyToMany var users: MutableSet<User> = HashSet() } 

あなたは上でより多くの情報を見つけることができます。必要なフィールドだけで 'TaskRequest'のような新しいオブジェクトを作成し、それをエンティティを持続させるために' Task'オブジェクトにマップしてみてください。 –

+0

それはもっと意味があります、なぜ私はそれを考慮しなかったのか分からず、以前の非Kotlinプロジェクトでそれをやったことがあります。私はまだコレクションを連載しない方法を知りたいのですが、それを簡単に行う方法があるようです。 –

+0

エンタープライズアプリケーションは異なるレイヤーで構成され、「責任の分離」と呼ばれる理由があります。あなたのコントローラで 'Entity'を使用しているならば、' HttpServletRequest'をDAOに送ることもできます。あなたはこの問題を解決しようと多くの時間を費やすことができます。あなたが有益になるかもしれない1時間ごとの従業員なら、よりクリーンなデザインから始めることができます。あなたの選択。 –

答えて

0

デシリアライズ時に一部のフィールドを無視するには、JsonIgnorePropertiesallowGetters=trueを使用する必要があります。これにより、フィールドusersはシリアル化時に移入されますが、逆シリアル化時には無視されます。あなたはAPIと永続層の両方に同じオブジェクトを使用しないでくださいhttps://fasterxml.github.io/jackson-annotations/javadoc/2.6/com/fasterxml/jackson/annotation/JsonIgnoreProperties.html#allowGetters()