Trouble-Shooting

**_*JSP์—์„œ LocalDateTime ํฌ๋งคํŒ… ๋ฌธ์ œ ํ•ด๊ฒฐ_***

์ฑ”๐Ÿป 2024. 1. 24. 19:55

์ž‘์„ฑ์ผ์ž: 2023๋…„ 7์›” 21์ผ

โœ”๊ฒฐ๋ก 


LocalDateTime์˜ ํƒ€์ž…์œผ๋กœ JSTL์˜ <fmt:formatDate>๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜์˜€์œผ๋‚˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์ผ์‹œ ํƒ€์ž…์„ Date๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

๐Ÿšฉ๋“ค์–ด๊ฐ€๋ฉฐ

LocalDateTime์ธ ํƒ€์ž…์„ JSP์—์„œ el๋กœ ์ถœ๋ ฅํ–ˆ๋”๋‹ˆ ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ์‚ฌ์ด์— โ€˜Tโ€™๋ผ๋Š” ๋ฌธ์ž์—ด์ด ๊ปด์„œ ์ถœ๋ ฅ์ด ๋˜์—ˆ๋‹ค. ์ฐพ์•„๋ณด๋‹ˆ LocalDateTime์€ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ T ๋ฌธ์ž๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

private LocalDateTime aprvDttm;

๐Ÿ‘€๋ฌธ์ œ ์ •์˜

์ด๋Ÿฐ ํ˜•์‹์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์•„์„œ formatting ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์•˜๋”๋‹ˆ jstl์˜ <fmt:formatDate> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์˜ ํ˜•์‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์กด์žฌํ–ˆ๋‹ค.

<fmt:formatDate value="${payInfoDTO.aprvDttm}" pattern="yyyy-MM-dd HH:mm:ss" />

์ด๋ ‡๊ฒŒ ์ง€์ •ํ•˜๊ณ  ์‹คํ–‰ํ–ˆ๋”๋‹ˆ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ใ… 

21-Jul-2023 21:00:12.945 ์‹ฌ๊ฐ [http-nio-8080-exec-42] org.apache.catalina.core.ApplicationDispatcher.invoke ์„œ๋ธ”๋ฆฟ [jsp]์„(๋ฅผ) ์œ„ํ•œ Servlet.service() ํ˜ธ์ถœ์ด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.
	javax.el.ELException: Cannot convert [2023-07-21T20:46:10] of type [class java.time.LocalDateTime] to [class java.util.Date]
		at org.apache.el.lang.ELSupport.coerceToType(ELSupport.java:573)

โ“์›์ธ ์ถ”๋ก 

์›์ธ์„ ์ฐพ์•„๋ณด๋‹ˆ <fmt:formatDate> ํƒœ๊ทธ๋Š” java.util.Date ์ธ์Šคํ„ด์Šค๋งŒ formatting ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‚˜๋Š” LocalDateTime ์ธ์Šคํ„ด์Šค๋ฅผ ์ฃผ์–ด์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋‹ค.

๐Ÿ’ช๐Ÿปย ํ•ด๊ฒฐ์ฑ… ์‹œ๋„

  1. โŒย el์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ด์„œ LocalDateTime์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด๋ณด์•˜์œผ๋‚˜
    ${payInfoDTO.aprvDttm.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))}

    ๊ฒฐ๊ณผ

    21-Jul-2023 21:06:00.109 ์‹ฌ๊ฐ [http-nio-8080-exec-61] org.apache.catalina.core.ApplicationDispatcher.invoke ์„œ๋ธ”๋ฆฟ [jsp]์„(๋ฅผ) ์œ„ํ•œ Servlet.service() ํ˜ธ์ถœ์ด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.
    	java.lang.NullPointerException: formatter
    		at java.base/java.util.Objects.requireNonNull(Objects.java:246)
    		at java.base/java.time.LocalDateTime.format(LocalDateTime.java:1751)
    		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    		at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    		at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    		at javax.el.BeanELResolver.invoke(BeanELResolver.java:159)
    		at org.apache.jasper.el.JasperELResolver.invoke(JasperELResolver.java:162)
    		at org.apache.el.parser.AstValue.getValue(AstValue.java:158)
    		at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
    		at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:692)
    		at org.apache.jsp.WEB_002dINF.views.fos.cs.mypage.orderDetail_jsp._jspService(orderDetail_jsp.java:326)
    		at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    		at javax.servlet.http.HttpServlet.service(HttpServlet.java:779)
    		at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466)
    		at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
    		at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)
    		at javax.servlet.http.HttpServlet.service(HttpServlet.java:779)

    DateTimeFormatter ๊ฐ์ฒด๊ฐ€ null์ด๋ผ๊ณ  ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค,,

  1. ๐Ÿ”บย ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋‚ ์งœ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด์„œ Model ๊ฐ์ฒด์— ๋„ฃ์–ด์ฃผ๊ธฐ
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    String formattedDate = payInfo.getAprvDttm().format(formatter);
    model.addAttribute("formattedDate", formattedDate);

    ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋‚ ์งœ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด์„œ Model ๊ฐ์ฒด์— ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ, ์ด ๊ฒฝ์šฐ ์ผ์‹œ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ํ™”๋ฉด์ด ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์€๋ฐ ์ผ์ผํžˆ ๋ณ€ํ™˜ํ•ด์„œ model์— ๋‹ด์•„์•ผ ํ•˜๋ฏ€๋กœ ์ฝ”๋“œ ์ค‘๋ณต ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ใ„ดใ„ดโ€ฆ

๐Ÿ’กํ•ด๊ฒฐ๋ฐฉ๋ฒ•

JSP ๋ทฐ์—์„œ JSTL์„ ์ด์šฉํ•ด ํฌ๋งทํŒ…ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๊น”๋”ํ•˜์ง€๋งŒ, ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ผ์ž๋ฅผ LocalDate, ์‹œ๊ฐ„์„ LocalTime, ์ผ์‹œ๋ฅผ LocalDateTime์œผ๋กœ ์ •์˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— fmt:formatDate ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋‹ค.

ํ˜„์žฌ JSP๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋‚ ์งœ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด์„œ Model ๊ฐ์ฒด์— ๋„ฃ๋Š” ๋ฐฉ๋ฒ•๋ฐ–์— ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ผ์‹œ๋ฅผ LocalDateTime์—์„œ Date๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  <fmt:formatDate> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.


Uploaded by N2T