๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป Dev/Back-End

[JAVA, Spring] NullPointerException ํ•ด๊ฒฐ๊ณผ์ •

yesolz 2023. 11. 18. 09:57
728x90

ํŠน์ • ๋ถ€๋ถ„์—์„œ ์ˆ˜์ • (PUT) ์š”์ฒญ์„ ํ•  ์‹œ 500 ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋‹ค.
์ด์Šˆ๋ฅผ ์žฌํ˜„ํ•˜๊ณ  ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜๋‹ˆ WARN NullPointerException ~~ ์ด๋ ‡๊ฒŒ ๋– ์žˆ์—ˆ๋‹ค.
 
1. ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„์„ try catch๋กœ ๋ฌถ์–ด์„œ NullPointerException ์‹œ ๋กœ๊ทธ๋ฅผ ๋„์›Œ์ฃผ์—ˆ๋‹ค. 

 
๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋Š” ์•„๋ž˜์™€ ๊ฐ™์•˜๋‹ค.

20231114 10:45:48.808 [http-nio-8090-exec-9] ERROR c.i.l.a.f.s.FileComponentUrlServiceImpl - NullPointerException caught:  
java.lang.NullPointerException: null
        at com.api.filecomponenturl.service.FileComponentUrlServiceImpl.updateUrl(FileComponentUrlServiceImpl.java:436)

NullPointerException์ด ๋ฐœ์ƒํ–ˆ๊ณ ,
updateUrl ๋ฉ”์†Œ๋“œ, FileComponentUrlServiceImpl.java:436๋ผ์ธ์ด๋ผ๊ณ  ์•Œ๋ ค์ฃผ๊ณ  ์žˆ๋‹ค.
 
 
436๋ผ์ธ์˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค.

// json ํ˜•์‹ ๊ฒ€์‚ฌ
if (!urlUpdateReq.getExtInfo().isEmpty() && !UrlUtil.checkValidJson(urlUpdateReq.getExtInfo())) {
	throw new ApiException("error.fileComponent.invalidExtInfoFormat", HttpStatus.BAD_REQUEST);
}

 
 
๋””๋ฒ„๊น…์„ ์œ„ํ•ด ํ•ด๋‹น ๋ผ์ธ์—์„œ ์ฐธ์กฐ๋˜๋Š” ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ null์ธ์ง€ ์•„๋‹Œ์ง€ ํ™•์ธํ•ด์•ผํ–ˆ๋‹ค.
ํ•ด๋‹น ๋ผ์ธ์—์„œ null์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋Š” urlUpdateReq์™€ urlUpdateReq.getExtInfo() ์ด๋ฉฐ, UrlUtil.checkValidJson ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ๋„ null ์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด ๊ฒ€ํ† ํ•ด์•ผํ–ˆ๋‹ค.
 

  1. urlUpdateReq์˜ null ์ฒดํฌ: ๋จผ์ € urlUpdateReq ๊ฐ์ฒด๊ฐ€ null์ธ์ง€ ํ™•์ธ. ์ด ๊ฐ์ฒด๊ฐ€ null์ด๋ฉด, ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ urlUpdateReq.getExtInfo()๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ NullPointerException์ด ๋ฐœ์ƒํ•œ๋‹ค.
  2. getExtInfo()์˜ ๋ฆฌํ„ด ๊ฐ’ ์ฒดํฌ: urlUpdateReq๊ฐ€ null์ด ์•„๋‹ˆ๋ผ๋ฉด, getExtInfo() ๋ฉ”์†Œ๋“œ์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด null์ธ์ง€ ํ™•์ธ. isEmpty() ๋ฉ”์†Œ๋“œ๋Š” null์— ๋Œ€ํ•ด ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ์ด ๋ถ€๋ถ„์—์„œ๋„ NullPointerException์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. UrlUtil.checkValidJson ๋ฉ”์†Œ๋“œ ๊ฒ€์‚ฌ: ์ด ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ null์„ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ. ์ž…๋ ฅ ๊ฐ’์œผ๋กœ null์ด ๋“ค์–ด๊ฐˆ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์ด ์žˆ๋Š”์ง€ ๊ฒ€ํ† ํ•ด์•ผ ํ•œ๋‹ค.

 
์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ์— ๋กœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

if (urlUpdateReq == null) {
    log.error("urlUpdateReq is null");
    throw new IllegalArgumentException("urlUpdateReq cannot be null");
}

String extInfo = urlUpdateReq.getExtInfo();
if (extInfo == null) {
    log.error("extInfo in urlUpdateReq is null");
    throw new IllegalArgumentException("extInfo cannot be null");
}

if (!extInfo.isEmpty() && !UrlUtil.checkValidJson(extInfo)) {
    log.error("Invalid JSON format in extInfo: " + extInfo);
    throw new ApiException("error.fileComponent.invalidExtInfoFormat", HttpStatus.BAD_REQUEST);
}

 
์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ƒํ™ฉ์„ ์žฌํ˜„ํ•ด๋ณด๋‹ˆ

20231114 11:01:47.600 [http-nio-8090-exec-3] ERROR c.i.l.a.f.s.FileComponentUrlServiceImpl - extInfo in urlUpdateReq is null 
20231114 11:01:47.613 [http-nio-8090-exec-3] WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [java.lang.IllegalArgumentException: extInfo cannot be null]

extInfo in urlUpdateReq is null ์กฐ๊ฑด๋ฌธ์ด ์ถœ๋ ฅ๋˜์—ˆ๋‹ค. 
 
์•„๋ž˜์™€ ๊ฐ™์ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

// json ํ˜•์‹ ๊ฒ€์‚ฌ
String extInfo = urlUpdateReq.getExtInfo();
if (extInfo != null && !extInfo.isEmpty() && !UrlUtil.checkValidJson(extInfo)) {
	throw new ApiException("error.fileComponent.invalidExtInfoFormat", HttpStatus.BAD_REQUEST);
}

 
!= null ๊ณผ isEmpty()์˜ ์ฐจ์ด๋Š” ์•„๋ž˜์˜ ๊ธ€์—์„œ ๋‹ค๋ฃจ์—ˆ๋‹ค. 
 
 
https://yesolz.tistory.com/entry/JAVA-null%EA%B3%BC-isEmpty%EC%9D%98-%EC%B0%A8%EC%9D%B4

[JAVA] null๊ณผ isEmpty์˜ ์ฐจ์ด

info != null: ์ด ์กฐ๊ฑด์€ info ๋ณ€์ˆ˜๊ฐ€ null์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ๊ฒ€์‚ฌ **null์€ ๋ณ€์ˆ˜๊ฐ€ ์•„๋ฌด๋Ÿฐ ๊ฐ์ฒด๋„ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•จ** ๊ฐ์ฒด๊ฐ€ null์ธ ๊ฒฝ์šฐ, ํ•ด๋‹น ๊ฐ์ฒด์˜ ์–ด๋– ํ•œ ๋ฉ”์†Œ๋“œ๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ด๋ฅผ

yesolz.tistory.com

 

728x90