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

dlls21님의 프로필 이미지
dlls21

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

H2 데이터베이스 설치

회원 관리 예제에서 등록 시 오류

해결된 질문

작성

·

2K

·

수정됨

1

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

회원 관리 예제 웹 MVC 개발> 회원 웹 기능 - 조회

이 강의에서 선생님의 결과와 제 결과가 다르게 나와서 질문 드립니다.

[회원 가입]을 눌러서 spring1, spring2를 등록하시고 [회원 목록] 탭에서 2개의 회원이 등록됨을 보이시는데,

저는 spring1을 등록하고 회원 목록을 들어 가보면

회원 목록.PNG이렇게 1하고 공백으로 나오고

여기서 spring2를 등록하면

오류 페이지.PNG이런 페이지가 나오며

인텔리제이에서도 잘 돌아가던 서버의 Run 창에서 오류가 죽 뜹니다.

짧은 지식으로 보기에는 뭐 어디가 null값이다 라는 오류들이 많이 뜨는데 제 선에서는 어디부터 어떻게 만져야 할지 잘 모르겠습니다 ㅠㅠ

 

아래는 인텔리 Run창에서 뜨는 오류입니다

캡처로 잘리는 부분들을 사진 중간에 남기겠습니다.

오류1.PNG2023-02-05T22:19:39.413+09:00 ERROR 2956 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because the return value of "hello.hellospring.domain.Member.getName()" is null] with root cause

2.PNG3.PNG2023-02-05T22:26:18.541+09:00 ERROR 2956 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because the return value of "hello.hellospring.domain.Member.getName()" is null] with root cause

4.PNG2023-02-05T22:27:45.238+09:00 ERROR 2956 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because the return value of "hello.hellospring.domain.Member.getName()" is null] with root cause

5.PNG

참고하셔야 할 파일들의 코드가 있으시면 바로바로 캡처해서 올리겠습니다.

'컴포넌트 스캔으로 빈 등록'에서 '자바 코드로 빈 등록'으로 넘어가는 강의에서 직접 코딩을 하다보니 거기에서 오류가 났을지도 모르겠다는 생각도 드네요

답변 1

2

안녕하세요. dlls21님, 공식 서포터즈 OMG입니다.

getName이 Null인 이유는 다양할 것 같아요.

우선 Member클래스에서 getName메서드가 return null;인지 확인해주세요.

해결이 안될 경우 댓글남겨주세요.



감사합니다.

dlls21님의 프로필 이미지
dlls21
질문자

imagename값이 들어있어요 ㅠㅠ

null로 받아들여지는 이유가 뭘까요?

다른 코드에서 발생하는 문제인것 같습니다.

프로젝트 코드를 확인해봐야 알 것 같아요.


전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.

구글 드라이브 업로드 방법 링크

주의: 업로드시 권한 문제 꼭 확인해주세요


감사합니다.

dlls21님의 프로필 이미지
dlls21
질문자

늦은 시간까지 고생 많으세요,,

https://drive.google.com/drive/folders/15E_wxezJnxCHDBMdNNSPTFwzQCZuZ69m?usp=share_link

프로젝트 폴더(hello-spring) 안에 압축 파일(zip)도 같이 넣어뒀습니다!

<input type="text" id="name" name="name" placeholder="이름을 입력하세요.">

name="name"이 누락되었네요 ^^

추가하시면 정상 동작될거에요~

HTML의 name에 해당하는 이름을 자바 객체의 동일한 이름의 필드와 매핑이 된다고 보시면 됩니다 :)

 즉, 아래 create(MemberForm form)에서

@PostMapping(value = "/members/new")
public String create(MemberForm form) {

age라는 필드가 추가되었다면



public class MemberForm {
    private String name;
    private int age;
    // getter ,setter.. 
} 

HTML에서 name="" << 여기에 age가 들어가야 합니다.

<input type="text" id="age" name="age" placeholder="나이를 입력하세요.">
dlls21님의 프로필 이미지
dlls21
질문자

와 감사합니다!! input에 name 속성이 없으면 당연히 값을 받을 수가 없죠...

강의를 따라간다고 따라만 치는 코딩하기에 바빴었는지 너무 어이없는 실수를 했네요 ㅠㅠ

 

 

추가로 그러고서 실행했더니 수업 pdf 자료 에 적혀있는 다른 오류도 뜨더라구요

application.properties 에서

spring.datasource.username=sa

이거도 마저 추가하니 정상적으로 작동을 시작했습니다.

 

그런데 저 명령은 뭘 뜻하는 건가요?

SpringConfig.java 파일에서

@Autowired
public SpringConfig(DataSource dataSource) {
    this.dataSource = dataSource;
}

스프링이 @Autowired로 애노테이트 된 SpringConfig객체에

Datasource dataSource 값을 넣어줄 수 있도록 연결 시켜주는 역할이라고 이해하면 될까요?

 

application.properties가 하는 역할이 자바 파일의 import 처리를 해주는 그런 비슷한 역할인가..?

image

올리신 코드를 확인했을 때 위에 내용이 추가되어 있지 않아 오류가 발생했었는데 얘기는 없으셔서 의아했었네요.

스프링부트 2.4이상부터 username을 입력해야합니다.(강의자료 참고)

application.properties파일은 애플리케이션에 필요한 다양한 설정정보를 기입하는 설정 파일입니다.

그래서 이와 같이 설정을 입력한 것이구요.(DB에 연결에 필요한 url, driver정보, username 등)

image

 

dlls21님의 프로필 이미지
dlls21
질문자

추가 설명까지 정말 감사드립니다.

덕분에 순조롭게 완강 했어요!

dlls21님의 프로필 이미지
dlls21

작성한 질문수

질문하기