我尝试构建Spring Rest应用程序。当我为返回JSON数据创建类Activity和控制器时,它总是返回ActivityDetail
的整个列表,但通常我只想要一个(最后一项)或者不是所有对象数据作为响应。
我现在该怎么办?创建对象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;
}
答案 0 :(得分:0)
@RequestMapping(value = "/api/{userId}/activities", method = RequestMethod.GET)
public Activity activities(HttpServletRequest request, @PathVariable(value="userId") final Long id){
User user = userRepository.findById(id);
List<Activity> activities = activityRepository.findAllByUsers(user);
return activities.get(0);
}
答案 1 :(得分:0)