에러는 안뜨는데 PUT 요청으로 글 수정이 안되는 경우

현상:

  • 글 수정 기능을 위해 PUT 요청을 보내고 응답 status는 200을 받았으나
    글이 수정되지 않는 현상이 발생

시도 방안:

  • intelliJ debugger를 사용하여 break point를 찍어서
    한줄씩 값이 제대로 넘어가는지 확인

문제 원인:

  • request URI로 넘어온 글 번호인 boardIdx를 controller에서 구분자로 인식은 했으나
    service단으로 넘겨주지 않아 수정할 글이 무엇인지를 찾을 수 없어서 발생
1
2
3
4
5
6
// Controller 영역
// 수정 전
@RequestMapping(value = "/api/board/{boardIdx}", method = RequestMethod.PUT)
public void updateBoard(@RequestBody BoardApi api) throws Exception {
boardService.updateBoard(api);
}


해결방안:

  • @PathVariable(“boardIdx”) int boardIdx를
    updateBoard 메소드의 parameter로 api와 함께 넘겨준다.

  • path URI로 넘어온 boardIdx값은 타입이 String인데,
    이 프로젝트에서는 int타입으로 정의했기 때문에 int 타입으로 바꿔주기 위해
    @PathVariable(“boardIdx”) 뒤에 int boardIdx를 적어준다.
1
2
3
4
5
6
7
8
// 수정 후
/// URI로 들어오는 구분자 boardIdx값을 읽어온다.
@RequestMapping(value = "/api/board/{boardIdx}", method = RequestMethod.PUT)
// boardIdx값의 타입을 int값으로 변경한 후,
// requestBody에 들어있는 api 객체(수정할 내용 객체)와 함께 Service영역으로 넘겨준다.
public void updateBoard(@PathVariable("boardIdx") int boardIdx, @RequestBody BoardApi api) throws Exception {
boardService.updateBoard(boardIdx, api);
}

참고 링크