작성
·
255
1
HTTP API를 POST 기반으로 등록하는 경우
회원 조회 - /mebers/{id} - GET 방식
회원 등록 - /mebers/{id} - POST 방식
회원 삭제 - /mebers/{id} - DELETE 방식
이라고 하셨는데,
ID로 회원조회, 수정, 삭제하는 기능을@RequestMapping("/{id}") 로 동일하게 작성하는 경우 아래와 같이 오류가 발생합니다.
hellospring.demo.controller.MemberController#getById(long)
to { [/api/members/{id}]}: There is already 'memberController' bean method
hellospring.demo.controller.MemberController#remove(long) mapped.
Ambiguous mapping. Cannot map 'memberController' method
hellospring.demo.controller.MemberController#getById(long)
to { [/api/members/{id}]}: There is already 'memberController' bean method
hellospring.demo.controller.MemberController#remove(long) mapped.
GET 방식, PUT 방식, DELETE 방식으로 다르기 때문에 @RequestMapping("/{id}")로 동일하게 작성해도 되는것이 아닌지 질문드립니다.
이
답변 1
4
안녕하세요. 배경난 님, 공식 서포터즈 codesweaver 입니다.
.
getById() 메서드와 update() 메서드 위에 있는 애노테이션을 수정해주셔야 합니다.
@GetMapping을 사용하고 싶으신 경우 @GetMapping("/{id}") 와 같이 작성하시면 되며 @RequestMapping 부분은 삭제해주시기 바랍니다.
@PutMapping의 경우에도 @PutMapping("/{id}") 와 같이 작성하시면 됩니다.
.
만약 @RequestMapping 으로 모든 HTTP 메서드를 처리하고 싶으신 경우 아래와 같이 value 와 method 를 직접 지정하는 방법을 사용하실 수 있습니다.
@RequestMapping(value = "/{itemId}", method= RequestMethod.GET
.
지금의 코드처럼 @GetMapping 과 @RequestMapping을 동시에 사용하실 경우 원치 않는 결과가 나올 수 있습니다.
.
감사합니다.