본문 바로가기
Error

Request processing failed; nested exception is java.lang.IllegalStateException: Ambiguous handler methods mapped for ...

by YoonJong 2022. 10. 14.
728x90

에러내용

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: Ambiguous handler methods mapped for '/members/1': 

{public com.jong.post.domain.member.response.MemberResponse com.jong.post.domain.member.controller.MemberController.findByUsername(java.lang.String)

public com.jong.post.domain.member.response.MemberResponse com.jong.post.domain.member.controller.MemberController.findById(java.lang.Long)}

 

에러원인

MemberCotroller 을 작성하고 test 코드를 작성 중에 해당 에러를 접했다.

에러내용에서 Ambiguous(모호하다) 라는데, 어디가 애매한지 확인해보았다.

 

@Test
@DisplayName("ID_회원찾기")
void findById() throws Exception {
    Member member = Member.builder()
            .username("username")
            .password(passwordEncoder.encode("1234"))
            .name("name")
            .nickname("nickname")
            .age(28)
            .role(Role.USER)
            .build();

    memberRepository.save(member);

    mockMvc.perform(get("/members/{id}", member.getId())
            .contentType(APPLICATION_JSON))
            .andExpect(status().isOk())
            .andDo(print());
}

일단 테스트 코드인데, 조회하는곳에서 모호하다니까 MemberController 에서 확인해보았다.

 

 

@GetMapping("/{id}") // 단건조회 id
public MemberResponse findById(@PathVariable Long id) {
    return memberService.findById(id);
}

@GetMapping("/{username}") // 단건조회 username
public MemberResponse findByUsername(@PathVariable String username) {
    return memberService.findByUsername(username);
}

id 로 단건을 조회하는것과 username 으로 단건을 조회할 수 있도록 만들었는데, 해당 부분에서 에러가 발생했다는 것을 알았다. 

 

조건은 유지하고 싶어 아래와 같이 경로를 구분할 수 있게끔 바꾸어주어 해결했다.

 

에러조치

@GetMapping("/member/{id}") // 단건조회 id
public MemberResponse findById(@PathVariable Long id) {
    return memberService.findById(id);
}

@GetMapping("/username/{username}") // 단건조회 username
public MemberResponse findByUsername(@PathVariable String username) {
    return memberService.findByUsername(username);
}

 

 

 

728x90

댓글