오늘은 2주차 과제를 2개 진행했고, 진행하면서 발생한 에러 정리와 해결한 방법을 공유한다.
문제: form.html에서 JSP 표현식 <%= request.getContextPath() %>을 사용하여 400 Bad Request 에러 발생
원인: Thymeleaf 템플릿에서 JSP 표현식을 사용할 수 없음
해결 방법:
<!-- 수정 전 -->
<form
method="post"
action="<%= request.getContextPath() %>/intro"
accept-charset="UTF-8"
>
<!-- 수정 후 -->
<form method="post" th:action="@{/profile}" accept-charset="UTF-8"></form>
</form>
문제: 폼 제출 후 데이터가 결과 페이지에 표시되지 않음
원인:
해결 방법:
public class Person {
private String name;
private Integer age;
private String mbti;
private String foods; // 추가
// getter/setter 추가
}
@PostMapping("/profile")
public String submit(@ModelAttribute("form") Person form, Model model) {
// 개별 데이터를 Model에 추가
model.addAttribute("name", form.getName());
model.addAttribute("age", form.getAge());
model.addAttribute("mbti", form.getMbti());
// foods 문자열을 배열로 변환
String foodsString = form.getFoods();
if (foodsString != null && !foodsString.trim().isEmpty()) {
String[] foodsArray = foodsString.split(",");
for (int i = 0; i < foodsArray.length; i++) {
foodsArray[i] = foodsArray[i].trim();
}
model.addAttribute("foods", foodsArray);
} else {
model.addAttribute("foods", new String[0]);
}
return "result";
}
문제: result.html에서 foods.empty 속성 사용으로 인한 오류
원인: Java 배열에는 empty 속성이 없음
해결 방법:
<!-- 수정 전 -->
<ul th:if="${foods != null and !foods.empty}">
<!-- 수정 후 -->
<ul th:if="${foods != null and #lists.size(foods) > 0}"></ul>
</ul>
문제: MbtiEmojiService를 @Autowired로 주입받았지만 사용하지 않아 잠재적 오류 가능성
해결 방법:
// 주석 처리
// @Autowired
// private MbtiEmojiService mbtiEmojiService;