我嘗試構建Spring Rest應用程序。當我爲返回的JSON數據創建類Activity和控制器時,它始終返回ActivityDetail
的整個列表,但通常我只需要一個(最後一個項目)或不需要所有對象數據作爲響應。如何在JSON響應中返回對象的特定部分
現在該怎麼辦?創建對象ActivityWithOneDetail
或ActivityWhitoutTitle
?但是我怎麼能將必要的信息傳遞給這個沒有溢出數據庫的對象?我認爲獲取Activity
對象並從該對象創建另一個對象(活動具有存儲庫public interface ActivityRepository extends JpaRepository { ... }
,因此我可以簡單訪問此對象)沒有任何意義。
我看到很多在實體和對象返回保持關係的問題,因爲有時我想更多的回報,從控制器更少的其它時間的數據,但是當我阻止通數據進入實體JSON響應它影響所有控制器。這不是彈性解決方案,所以,我想你可以給我另一個提示,我怎麼能從我的控制器返回JSON objects
,並保持良好的性能與數據庫(我想從數據庫中獲取所有@oneToMany
數據不是我應該做的每個請求)。
下面我粘貼我的部分代碼,但我認爲這個問題更具理論性。我的構造租用
@Entity
@Table(name = "ACTIVITY")
public class Activity {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "CREATE_DATE")
@Temporal(TemporalType.TIMESTAMP)
@NotNull
private Date createDate;
@Column(name = "ACTIVE")
@NotNull
private Boolean active;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "ACTIVITY_USER", joinColumns = @JoinColumn(name = "ACTIVITY_ID", referencedColumnName = "ID"), inverseJoinColumns = @JoinColumn(name = "USER_ID", referencedColumnName = "ID"))
@JsonBackReference
private Set<User> users;
@OneToMany(mappedBy = "activity_id")
private List<ActivityDetail> activityDetails;
@ManyToOne
@JoinColumn(name = "ACTIVITY_OWNER")
private User activityOwner;
@OneToMany(mappedBy = "activityParent")
@JsonBackReference
private List<Task> activityTasks;
}
// Constructor, Getter, Setter
而且部分:
@RequestMapping(value = "/api/{userId}/activities", method = RequestMethod.GET)
public List<Activity> activities(HttpServletRequest request, @PathVariable(value="userId") final Long id){
User user = userRepository.findById(id);
List<Activity> activities = activityRepository.findAllByUsers(user);
return activities;
}
我問我的活動對象的這一部分: '私人名單 activityDetails',活動對象的一個也沒有。 –