인프런 커뮤니티 질문&답변

192님의 프로필 이미지
192

작성한 질문수

모든 개발자를 위한 HTTP 웹 기본 지식

HTTP API 설계 예시

HTTP API 설계 질문드립니다.

작성

·

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을 동시에 사용하실 경우 원치 않는 결과가 나올 수 있습니다.

.

감사합니다.

192님의 프로필 이미지
192

작성한 질문수

질문하기