728x90
반응형
에러 메시지
2024-10-15 11:09:37.899[0;39m [31mERROR[0;39m [35m54632[0;39m [2m---[0;39m [2m[-nio-443-exec-7][0;39m [36mo.a.c.c.C.[.[.[/].[dispatcherServlet] [0;39m [2m:[0;39m Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NumberFormatException: For input string: "ErrorCount"] with root cause
java.lang.NumberFormatException: For input string: "ErrorCount"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_411]
at java.lang.Long.parseLong(Long.java:589) ~[na:1.8.0_411]
at java.lang.Long.valueOf(Long.java:803) ~[na:1.8.0_411]
at conf.ManagerPageController.getNoticeDetail(ManagerPageController.java:934) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_411]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_411]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_411]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_411]
Long.parseLong() 또는 Long.valueOf()가 "ErrorCount"를 숫자로 변환하려고 시도하였으나 실패했음을 나타낸다.
이 오류는 전달하려는 형식이 숫자가 아닌 문자열인 경우 발생한다.
1. 원인
기존 코드
@RequestMapping(value = "noticeDetail/{noticeId}", method = RequestMethod.GET)
public String getNoticeDetail(@PathVariable(required = false) String noticeId, Model model) throws Exception {
if ("new".equals(noticeId)) {
// 새 게시글 작성 시
model.addAttribute("title", "");
model.addAttribute("startDate", "");
model.addAttribute("endDate", "");
model.addAttribute("content", "");
model.addAttribute("imgPath", "");
model.addAttribute("isNew", true);
} else {
// 기존 게시글 조회 로직
Long id = Long.valueOf(noticeId);
NoticeDTO notice = noticeService.getNoticeById(id);
model.addAttribute("title", notice.getTitle());
model.addAttribute("startDate", notice.getStartDate());
model.addAttribute("endDate", notice.getEndDate());
model.addAttribute("content", notice.getContent());
model.addAttribute("imgPath", notice.getImgPath());
model.addAttribute("isNew", false);
}
model.addAttribute("urls", authUtil.getOauth2());
return "/managerPage/noticeDetail";
}
기존 게시글을 조회하려는 로직에서 문제가 생겼다.
noticeId에 "ErrorCount" 문자열이 전달되고 있었던게 문제였다.
이로 인해 Long.valueOf()가 예외를 발생시켜 해당 에러가 발생한 것이다.
우선 숫자 형식이 아닌 ErrorCount 문자열이 어떻게 들어왔는지는 나중에 좀 봐야겠다.
우선 예외 처리를 진행하였다.
2. 해결 : 예외 처리
수정 된 코드
@RequestMapping(value = "noticeDetail/{noticeId}", method = RequestMethod.GET)
public String getNoticeDetail(@PathVariable(required = false) String noticeId, Model model) throws Exception {
if ("new".equals(noticeId)) {
// 새 게시글 작성 시
model.addAttribute("title", "");
model.addAttribute("startDate", "");
model.addAttribute("endDate", "");
model.addAttribute("content", "");
model.addAttribute("imgPath", "");
model.addAttribute("isNew", true);
} else {
try {
Long id = Long.valueOf(noticeId);
NoticeDTO notice = noticeService.getNoticeById(id);
model.addAttribute("title", notice.getTitle());
model.addAttribute("startDate", notice.getStartDate());
model.addAttribute("endDate", notice.getEndDate());
model.addAttribute("content", notice.getContent());
model.addAttribute("imgPath", notice.getImgPath());
model.addAttribute("isNew", false);
} catch (NumberFormatException e) {
model.addAttribute("error", "유효하지 않은 공지사항 ID입니다.");
return "errorPage";
}
}
model.addAttribute("urls", authUtil.getOauth2());
return "/managerPage/noticeDetail";
}
noticeId의 값이 숫자가 아닌 경우에 대해서 예외 처리를 하였다.
728x90
반응형