我尝试构建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',活动对象的一个也没有。 –