코드
@Data
@Entity
@Table(name = "REPLIES")
public class Reply {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(nullable = false, length = 500)
private String content;
@Column(nullable = false)
private String writer;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "POST_ID")
private Post post;
}
@PostMapping("/reply/insert/{id}")
public String insert(@ModelAttribute Reply reply, @PathVariable int id, @AuthenticationPrincipal UserDetailsImpl userDetails) {
Post post = postService.getPost(id);
reply.setPost(post);
reply.setWriter(userDetails.getUsername());
replyService.insertReply(reply);
return "redirect:/post/" + id;
}
주의할 점
- Reply 클래스를 보면 id변수가 있다. 그리고 컨트롤러에서 보면 요청받는 URI에도 id가 있다.
- 나는 어노테이션만 써주면 알아서 URI에 있는 id는 @PathVariable로 들어가고, 폼에서 받은 데이터는 @ModelAttribute로 들어갈 줄 알았다.
하지만 로그를 찍어보니 계속 reply의 id값이 URI의 id값과 일치하였다.
해결
- 해결방법은 그냥 URI의 id를 다른 이름으로 바꿨다.
id
->postId
혹시나 해서 순서를 바꿔보았지만, 안되는건 똑같았다. 그냥 이름을 바꾸는게 최고다.