2017-11-23 8 views
0

私はSpring Bootを使用して安心なAPIを構築していますが、問題が発生しています。
私はEventというエンティティを持っていますが、次の属性を持っています: 長いID、文字列タイトル、カレンダーの日付、リスト<ユーザー>所有者(OneToMany)、2倍の価格。
エンティティには、ロングID、ストリング名、カレンダーの生年月日、リスト<車>という属性があります。
エンティティカーには、属性としてLong IDとStringモデルがあります。シリアル化の深度を変更する

問題は、私はHTTPメソッドが私のイベント・コントローラでGETアクセスしたときに、私はこのJSONを取得するには、次のとおりです。

{ 
    "id":1, 
    "title":"Example event", 
    "date":"2017-01-01", 
    "owners":[ 
     { 
      "id":1, 
      "name":"Chuck Norris", 
      "birthDate":"1000-05-12", 
      "cars":[ 
       { 
        "id":1, 
        "model":"Shelby GT" 
       } 
      ] 
     }, 
     { 
      "id":2, 
      "name":"Bruce Lee", 
      "birthDate":"1980-05-12", 
      "cars":[ 
       { 
        "id":2, 
        "model":"Ford Maverick" 
       } 
      ] 
     } 
    ], 
    "price":5 
} 

代わりに全体の所有者オブジェクトをシリアル化のため、私はこのように、単に自分のIDを望みます

{ 
    "id":1, 
    "title":"Example event", 
    "date":"2017-01-01", 
    "owners":[ 
     { 
      "id":1 
     }, 
     { 
      "id":2 
     } 
    ], 
    "price":5 
} 

どうすればこの問題を解決できますか?そして、これは正しいですか?私はすべての内部オブジェクトをシリアライズすることは現時点ですべての属性を必要とせず、また双方向関係を持つループを引き起こすため、リソースの無駄であると思う。

+0

どのような双方向関係がありますか? – Kyrstellaine

答えて

0

@JsonIgnore不要なフィールドへの注釈シリアル化する

+0

しかし、そうすることで、これらのフィールドをUser Controller経由で取得することはできません。 私はそれらのフィールドを取得する必要があります –

0

イベントのカスタムビューを返すように思えますが、実際にはAPIのユーザーがイベントで行う必要があることに応じて、フルオブジェクトを使用する方が良い場合があります。 1つのオプションは、特に、他の呼び出しで完全なUserオブジェクトをシリアライズする必要があるとコメントしたため、このメソッドで使用されるObjectMapperをUserのカスタムシリアライザで設定することです。このユースケースについては

+0

どのように私はこれを行うことができますのヒント? –

+0

http://www.baeldung.com/jackson-deserializationのチュートリアルをご覧ください。 – Kyrstellaine

0

私は、動的フィルタリングのための小さなジャクソンモジュールを開発しました:

https://github.com/Antibrumm/jackson-antpathfilter

第二の可能性は、あなたのエンドポイント用のDTOを構築することです。

関連する問題