• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

아이디 중복확인 NullPointerException

24.01.17 21:24 작성 조회수 151

0

20:35 예시 코드처럼 입력했는데, 공백을 입력하고 중복확인을 하는 경우처럼 반환되는 Member가 없는 경우 NullPointerException이 발생합니다.

memID로 찾아지는 Member가 있는 경우 0을 반환하면서 잘 동작합니다.

선생님 예시에서는 작동이 잘 되는데 왜 저는 안 되는 걸까요? 옵셔널이나 예외처리를 해주어야 할까요?

    @RequestMapping("/memRegisterCheck.do")
    public @ResponseBody int memRegisterCheck(@RequestParam("memID") String memID) { //넘어오는 파라미터 이름과 받는 이름이 같은 경우 생략 가능
        Member m = memberMapper.registerCheck(memID);
        if (m != null || m.equals("")) {  //아이디가 중복이거나 공백인 경우 => 사용불가
            return 0;
        }
        return 1;  //사용 가능
    }

 

java.lang.NullPointerException
	kr.board.controller.MemberController.memRegisterCheck(MemberController.java:25)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:498)
	org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
	org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
	org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:871)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:777)
	org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:870)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:489)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:583)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

 

답변 2

·

답변을 작성해보세요.

0

Member m = memberMapper.registerCheck(memID);
위에서 아이디가 공백이다면 Member m=null 이런 개념이기 때문에 m. 을 이용해서 equals() 메서드를 접근할수없어서 NullPointerException이 나는듯합니다.
사전에 아이디에 공백을 넣을수없게 미리 차단을 하고나서 Member m = memberMapper.registerCheck(memID); 이부분이 수행되어야 될듯합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.17

안녕하세요, 인프런 AI 인턴입니다.

작성하신 코드와 오류 메시지를 보면, NullPointerExceptionMember mnull인 경우에도 .equals("")를 호출하려고 해서 발생합니다. mnull일 때는 .equals("") 호출 자체가 불가능하기 때문에 오류가 발생하는 것입니다.

해당 부분을 다음과 같이 수정해야 할 것 같습니다:

if (m != null && m.getMemID() != null && !m.getMemID().equals("")) { 
    // 아이디가 중복이 있는 경우 => 사용불가
    return 0;
}

여기서 m.getMemID()mmemID 값을 가져와야 하는데, 당연히 실제 멤버 변수 이름은 코드에 맞게 조정해야 합니다.

이와 비슷한 상황을 다루는 예시로, 다음 질문들이 참고가 될 수 있습니다.

해당 링크들에서는 동일한 상황이 아닐 수 있으나, XML Mapper를 사용할 때 resultTypeparameterType에 관한 내용이 언급되어 있으니 NullPointerException과는 다르게 Mapper 설정에 관한 문제가 있을 때 참고하시면 도움이 될 수 있습니다.

질문자님의 경우에는 명시적인 null 체크를 통해 문제를 해결할 수 있을 것으로 보입니다. 변수가 null인지 먼저 확인하고, 그 후에 값이 있는 경우에만 메서드나 속성에 접근하는 것을 권장합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.