@PathVariable @ModelAttribute를 같이 사용할 때, 주의할 점

수정이·2022년 7월 14일
0

Spring

목록 보기
8/16
post-thumbnail
post-custom-banner

코드

  • Reply
@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;
}
  • ReplyController
@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
    혹시나 해서 순서를 바꿔보았지만, 안되는건 똑같았다. 그냥 이름을 바꾸는게 최고다.
post-custom-banner

0개의 댓글