java - Spring 休息多对多响应

标签 java spring rest jackson

我有三门课。
用户可以组织一项 Activity 或参加多项 Activity 。
Activity 只能有一名组织者,但有很多参加者。
attende - 表将用户与事件绑定(bind),并具有附加字段(这就是我不使用@ManyToMany注释的原因)

我希望我的响应向用户显示他参加的 Activity ,但以某种方式排除参加者类中的“用户”字段。
当我寻找事件时,我想在参加者类中排除“事件”。

我考虑过为用户表示和事件表示创建 Dto,但我觉得它会重复我的所有代码。
有没有办法注释Attendee类,以便对于Event它将显示一件事,而对于User它将显示另一件事?
我读到了有关 @JsonManagedReference 和 @JsonBackReference 的内容,但不确定它会对我有帮助。

@Entity
@Table(name = "calendar_users")
public class User extends BaseEntity {

    @Column(nullable = false)
    private String name;

    @OneToMany(mappedBy = "user")
    private List<Attendee> attendeeEvents;

    @OneToMany(mappedBy = "organizer")
    private List<Event> organizedEvents;
}

@Entity
@Table(name = "events")
public class Event extends BaseEntity {

    @Column(nullable = false)
    private String name;

    @ManyToOne(optional = false)
    @JoinColumn(name = "user_id")
    private User organizer;

    @OneToMany(mappedBy = "event")
    private List<Attendee> attendees;
}

@Entity
@Table(name = "attendees")
public class Attendee extends BaseEntity {

    private Date responseTime;

    @ManyToOne(optional = false)
    @JoinColumn(name = "response_status_id")
    private ResponseStatus responseStatus;

    @ManyToOne(optional = false)
    @JoinColumn(name = "user_id")
    private User user;

    @ManyToOne(optional = false)
    @JoinColumn(name = "event_id")
    private Event event;

}

最佳答案

实际上正确的解决方案是添加 DTO 对象以仅提供必要的信息。

但是对于简单的情况,您可以定义两个类 attendee 和 attendeeSimple (没有事件)。并在用户和事件中使用 2 个不同的实体。

如果 attendee 扩展 attendeeSimple,可能会更简单。

关于java - Spring 休息多对多响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43574455/

相关文章:

api - 传递给 yii\web\User::login() 的参数 1 必须实现接口(interface) yii\web\IdentityInterfac,给定为 null

ios - 仅在 GET 请求上出现 Alamofire 请求错误

java - Java中如何获取GUI组件的名称?

Spring - 异常不记录到文件

SpringMVC @PathVariable 被截断

spring - 将数据传递到服务层的最佳实践

java - RestController设计之争——Spring Boot REST API

java - 使用 hibernate 的属性文件连接到 Mysql 数据库

将方法移动到另一个类的Java效率

java - switch 语句中的重复局部变量