2017-02-05 9 views
0

を含むJSONを返す私のコントローラである。コントローラはここで2つのエンティティの代わりに1

// CREATE NEW TODOITEM FROM SENT JSON 
@PostMapping("/todos") 
@ResponseStatus(HttpStatus.OK) 
public ToDoItem newToDo(
     @RequestBody ToDoItem toDoItem, 
     Principal principal 
) { 
    User currentUser = userService.findLoggedInUser(principal); 
    return toDoItemService.addToDo(toDoItem, currentUser); 
} 

toDoItemService.addToDo

public ToDoItem addToDo(ToDoItem toDoItem, User user) { 
    String toDoTitle = toDoItem.getTitle(); 
    LocalDate toDoDueDate = toDoItem.getDueDate(); 
    ToDoItem newToDo = new ToDoItem(user, toDoTitle, toDoDueDate); 
    return toDoItemRepository.save(newToDo); 
} 

ToDoItemエンティティ(ommitedコンストラクタおよびゲッター/セッター):

@Entity 
@Table (name = "TO_DO_ITEMS") 
public class ToDoItem extends BaseEntity { 

@Column(name = "TITLE", nullable = false) 
private String title; 

@Column(name = "COMPLETED") 
private boolean completed; 

@Column(name = "DUE_DATE", nullable = false) 
@Convert(converter = LocalDateAttributeConverter.class) 
@JsonDeserialize(using = LocalDateDeserializer.class) 
@JsonSerialize(using = LocalDateSerializer.class) 
private LocalDate dueDate; 

// a ToDoItem is only associated with one user 
@ManyToOne(cascade=CascadeType.PERSIST) 
@JoinColumn(name = "USER_ID") 
private User user; 

そして私のtoDoItemRepositoryはCrudRepositoryを拡張するだけです。

は、私が撮影した場合: localhost:8080/todos

{ 
"title":"testtodo3", 
"dueDate": [ 
    2015, 
    12, 
    6 
] 
} 

が、私はこれを取得:

{ 
"id": 1, 
"title": "testtodo3", 
"completed": false, 
"dueDate": [ 
2015, 
12, 
6 
], 
"user": { 
"id": 1, 
"username": "gruchacz", 
"password": "password", 
"email": "[email protected]" 
} 
} 

私はCrudRepositoryがないから名前を付けて保存(のみToDoItemを返すてるのに、なぜ私のユーザーのすべての詳細が表示されます)?私は私のToDoItemがUserにリンクされていることを知っていますが、私はそれがID、タイトル、完了し、ユーザーデータなしでdueDateだけを返したいですか?私はToDoItemエンティティのtoStringメソッドをオーバーライドして、そのコントローラからStringを返すことができますが、非常に不愉快で、JSONへの変換を処理するToDoItemとjacksonだけをretunrする方が好きです。

答えて

1

あなたのための2つのオプションがあります。

1:戻ってそれを実現するために、別の値オブジェクトを作成し、使用DTOパターン:ジャクソンはそれを無視、または

2う、ToDoItemでUserフィールド上@JsonIgnoreを追加HTTPレイヤー上。

2番目のオプションをお勧めします

関連する問題