从前端发送后,数据将作为空值发送到数据库

Data is being sent to database as null after sending from frontend

我正在尝试在 EventUser 实体之间建立联系,以便我可以将参赛者保存到活动中。我以前从未使用过 @ManyToMany 映射,所以一直在学习教程。当我尝试通过 postman(eventiduserid)post 数据时,我得到了两者的空值。

到目前为止,我有用户和事件实体,

@Data
//Entity maps object to database
@Entity
@NoArgsConstructor
@Table(name = "member")
public class User implements UserDetails, Serializable {

//More fields

//Relationship between user and events to get entrants
    @OneToMany(mappedBy = "userid", fetch = FetchType.LAZY)
    Set<Entrants> entrants;
@Data
//Entity maps object to database
@Entity
@NoArgsConstructor
@Table(name = "event")
public class Event implements Serializable {

//More fields

//Relationship with event and users for entrants to an event
    @OneToMany(mappedBy = "eventid",fetch = FetchType.LAZY)
    Set<Entrants> entrants;

然后我有一个参赛者实体来保存参赛者参加活动。

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Entrants implements Serializable {

    @Id
    @GeneratedValue
    Long id;

    @ManyToOne
    @JoinColumn(name = "user_id")
    User userid;

    @ManyToOne
    @JoinColumn(name = "event_id")
    Event eventid;


}

然后在我的控制器中,

@PostMapping("/management/events/entrants")
    GenericResponse createEntrant(@Valid @RequestBody Entrants entrant) {
        System.out.println("entrant is: " +entrant);
        entrantService.save(entrant);
        return new GenericResponse("Entrant saved");
    }

参赛者服务

public Entrants save(Entrants entrants) {
        return entrantRepository.save(entrants);
    }

存储库是标准的,上面使用了 save() 方法。

如果我在Postman中post以下,

{
    "user_id": 1,
    "event_id": 1
}

我明白了 entrant is: Entrants(id=null, userid=null, eventid=null) id 显然是由 Spring 创建的,但是 userideventid 是空的。

据我所知,我认为这与 Entrants 实体中的 2 个字段有关,属于 UserEvent 类型,而不是 int .但我不确定如何解决这个问题。

我遵循的教程并非真正基于我的实现,因此我不得不进行很多更改。

您可以像这样在控制器中使用 Dto:

@PostMapping("/management/events/entrants")
   createEntrant(@Valid @RequestBody EntrantDto entrant) {
        System.out.println("entrant is: " +entrant);
        entrantService.save(entrant);
        return new GenericResponse("Entrant saved");
    }

EntrantDto.java

public class EntrantDto {
    private Long user_id;
    private Long event_id;
    // no-args constructor, getter, setter,...
}

并像

那样稍微修改一下您的服务
public Entrants save(EntrantDto entrant) {
    User user = this.userRepository.findById(entrant.getUser_id()).orElseThrown(IllegalArgumentException::new);
    Event event = this.eventRepository.findById(entrant.getEvent_id()).orElseThrown(IllegalArgumentException::new);
    Entrants entrants = new Entrants(user, event);
    return entrantRepository.save(entrants);
}