작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
315
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 인턴입니다.
작성하신 코드와 오류 메시지를 보면, NullPointerException
은 Member m
이 null
인 경우에도 .equals("")
를 호출하려고 해서 발생합니다. m
이 null
일 때는 .equals("")
호출 자체가 불가능하기 때문에 오류가 발생하는 것입니다.
해당 부분을 다음과 같이 수정해야 할 것 같습니다:
if (m != null && m.getMemID() != null && !m.getMemID().equals("")) {
// 아이디가 중복이 있는 경우 => 사용불가
return 0;
}
여기서 m.getMemID()
는 m
의 memID
값을 가져와야 하는데, 당연히 실제 멤버 변수 이름은 코드에 맞게 조정해야 합니다.
이와 비슷한 상황을 다루는 예시로, 다음 질문들이 참고가 될 수 있습니다.
해당 링크들에서는 동일한 상황이 아닐 수 있으나, XML Mapper를 사용할 때 resultType
과 parameterType
에 관한 내용이 언급되어 있으니 NullPointerException
과는 다르게 Mapper 설정에 관한 문제가 있을 때 참고하시면 도움이 될 수 있습니다.
질문자님의 경우에는 명시적인 null
체크를 통해 문제를 해결할 수 있을 것으로 보입니다. 변수가 null
인지 먼저 확인하고, 그 후에 값이 있는 경우에만 메서드나 속성에 접근하는 것을 권장합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.