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);
}
}
所以我有两个 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);
}
}