inflearn logo
강의

Course

Instructor

Spring Framework is in my hands [Spring Shot 1]

41. Implementation of ID duplication check function (Ajax)

아이디 중복확인 NullPointerException

360

작성자 없음

0 asked

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)

 

jsp spring mvc spring-security

Answer 2

0

bitcocom

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

0

communityai8509

안녕하세요, 인프런 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인지 먼저 확인하고, 그 후에 값이 있는 경우에만 메서드나 속성에 접근하는 것을 권장합니다.

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

재생이 안되요

0

113

0

404 HTTP 상태 코드

0

163

2

lombok api 등록 후

0

174

2

UsernamePasswordAuthenticationToken 생성에 대해서 질문이 있습니다.

0

222

1

@RequestBody에 관해서 질문이요.

0

181

1

MVC06에 회원정보수정, 이미지등록수정 강의 영상이 없습니다

2

207

1

namespace 칸이 없습니다.

0

279

2

프로젝트 생성시 Srping MVC Project 없음

0

354

1

spring security 이후 Spring MVC06

0

222

1

Lomkob API 관련

0

201

1

깃허브 주소

0

264

1

포워딩오류? 인거 같습니다

0

336

1

css바꾸고 싶을때

0

306

1

git 연결할때 오류

0

262

1

프로젝트 생성시 Srping MVC Project 없음

0

1060

1

Oracle을 연결하고 싶은데, sql파일을 만들고나면...

0

281

1

프로젝트 생성시 Srping MVC Project 없음

0

4719

6

43강 age 0오류

0

298

1

Controller의 BoardMapper 쪽에서 문제가 있습니다.

0

380

1

Spring05 버전에서 이미지를 설정했을 때 권한이 보이지 않습니다

0

238

1

스프링 시큐리티 로그인 후 모달창 질문드립니다

0

624

0

새로고침해야만 등록한 글이 리스트에 뜹니다.

0

244

1

회원테이블과 권한테이블 간 관계

0

468

1

MVC02에서 List 화면이 나오지 않습니다

0

243

1