Json 内容 post 在 spring 引导中的多对一 rs 请求

Json content for One post in Many to one rs request in spring boot

所以我有两个 classes, class 用户:

@Data
@NoArgsConstructor
@Entity
public class User {

    @Id
    @GeneratedValue
    private int id;
    private String displayName;
    private String email;
    private String gender;
    private String Nationality;
    private int age;

    @OneToMany(mappedBy = "id", cascade = CascadeType.ALL)
    private List<Event> createdEvents;

    @OneToMany(mappedBy = "id", cascade = CascadeType.ALL)
    private List<Reservation> clientReservations;


}

和class事件:

@Data
@Entity
public class Event {

    @Id
    @GeneratedValue
    private int id;
    private String eventName;
    private Date eventDate;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "created_at", nullable = false, updatable = false)
    @CreatedDate
    private Date createdAt;


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

}

控制器class:

@RestController
@RequestMapping("/event")
public class EventController {

    @Autowired
    private EventRepository eventRepository;

    @PostMapping("/create")
    public Event addEvent(@RequestBody Event event) {
        return eventRepository.save(event);
    }
}

Json:

"eventName": "theatre",
    "eventDate": "2020-04-22",
    "user": 3

我是 spring 的新手,我试过的方法不起作用。 现在我想添加一个事件,我需要传递一个用户 ID 来引用创建事件的用户,我该怎么做?

1.
在您的事件 class 中,添加这样的构造函数:

public Event(String eventName, Date eventDate, User user) {
    this.createdAt = new DateTime();
    
    this.eventName = eventName;
    this.eventDate = eventDate;
    this.user = user;
}

2.
不要将 Event 作为 @RequestBody 传递,而是考虑创建一个 dto 来处理 Post 请求

上提交的数据
public class EventDto {
    private String eventName;
    private String eventDateString;
    private Long userId;

    public String getEventName() {
        return eventName;
    }

    public void setEventName(String eventName) {
        this.eventName = eventName;
    }

    public String getEventDateString() {
        return eventDateString;
    }

    public void setEventDateString(String eventDateString) {
        this.eventDateString = eventDateString;
    }

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }
}

那你必须把@RequestBody Event event换成@RequestBody EventDto eventDto

3.
注入 UserRepository、处理数据、检查提交的用户 ID 是否存在并保存您的事件

@PostMapping("/create")
public Event addEvent(@RequestBody EventDto eventDto) throws ParseException {
    var user = userRepository.findById(eventDto.getUserId());

    if (user.isPresent()) {
        Event event = new Event(eventDto.eventName.trim(), new SimpleDateFormat("yyyy-MM-dd").parse(eventDto.eventDateString), user.get());
        eventRepository.save(event);
    }
}