2016-11-05 6 views
0

私はSpring REST Webアプリケーションを持っています。応答エンティティを返すメソッドがあります。クライアントのレスポンスエンティティとレスポンスが異なる

@RequestMapping(value = "/shoes", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) 
public ResponseEntity<?> getShoes() { 

    Collection<Shoes> shoes = shoesService.findAll(); 

    ResponseEntity responseEntity = new ResponseEntity<>(shoes, HttpStatus.OK); 
    return responseEntity; 
} 

私が最後の行にブレークポイントを設定すると、私はresponseEntityは、次のオブジェクトのリストが含まれていることを見ることができます:

靴{ID = 1、局在=ローカライズ{ID = 1 、city = 'Denver'}、カテゴリ=カテゴリ{id = 1、name = 'wellingtons'、グループ= '男性'}、サイズ= 9}

クライアントアプリケーションでリクエストを送信すると、 IDとサイズのみを含むJSONを取得します。

{ 
    "id": 1, 
    "size": 9 
} 

ローカリゼーションとカテゴリが表示されないのはなぜですか?ここで

Shoesクラスです:あなたは双方向の関連を持っている場合

@Table(name = "shoes") 
public class Shoes{ 

    @Column(name = "id") 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @JsonBackReference 
    @ManyToOne 
    private Localization localization; 

    @JsonBackReference 
    @ManyToOne 
    private Category category; 

    @Column(name = "size") 
    private int size; 

    ... 
} 

答えて

0

は、あなたが(JsonManagedReferenceで注釈さ)と子の役割を持つ親の役割を持っているオブジェクトを宣言する必要があります(注釈付きJsonBackReference)を使用してサイクルを中断します。注釈は、関連性がフィールド間の双方向結合の一部であることを示すために使用

;:あなたのシリアル化しないように、両方の特性(localizationcategory)の注釈付き

JsonBackReference参照その役割は「子」(または「背中」)のリンクであることを示します。プロパティの値の型はBeanでなければなりません。コレクション、マップ、配列、列挙型にすることはできません。リンケージは、この注釈で注釈が付けられたプロパティがシリアル化されないように処理されます。デシリアライズ時には、その値は「管理された」(フォワード)リンクを持つインスタンスに設定されます。

関連する問題