ModelAttribute 관련 오류
1. 진행상황
회원가입 폼 테스트 중에 오류가 생겨버렸다(
css는 나중에 입힐거에요
).
(역시나 오늘도 발생한 오류..)
그래도 나름 괜찮은 것은 로그가 제대로 찍혀있다는 것... 아무튼, 로그를 보니까 오류가 발생해서 BindingResult 객체에는 제대로 들어갔는데, 그 뒤에 파싱을 못한것 같다.
<!-- 중략 -->
<form role="form" action="/members/post" th:object="${memberForm}" method="post">
<div class="form-group">
<label th:for="loginId">이름</label>
<input type="text" th:field="*{loginId}" class="form-control" placeholder="아이디를 입력해주세요."
th:class="${#fields.hasErrors('loginId')}? 'form-control fieldError' : 'form-control'">
<p th:if="${#fields.hasErrors('loginId')}" th:errors="*{loginId}">다시입력해주세요.</p>
</div>
html을 보면 별다른 문제는 없어 보인다. 그럼 Controller를 볼까?
Controller와 Dto는 아래와 같다.
public class MemberController {
private final MemberService memberService;
@GetMapping("/post")
public String postForm(Model model) {
model.addAttribute("memberForm", new MemberFormDto());
return "members/postMemberForm";
}
@PostMapping("/post")
public String save(@Valid @ModelAttribute MemberFormDto memberForm, BindingResult result) {
if (result.hasErrors()) {
log.info("MemberForm 검증 오류 errors={}", result);
return "members/postMemberForm";
}
memberService.join(memberForm.toEntity());
return "redirect:/";
}
}
public class MemberFormDto {
@NotEmpty(message = "회원 이름은 필수 입니다.")
private String loginId;
private String password;
private String name;
private String city;
private String address;
private Integer zipcode;
public Member toEntity() {
return Member.builder()
.name(this.name)
.loginId(this.loginId)
.password(this.password)
.address(Address.builder()
.address(this.address)
.city(this.city)
.zipCode(this.zipcode)
.build())
.build();
}
}
이것도 별 문제 없는데.. 구글링 시작!!
그러다가 찾은 갓(김)영한님의 답변!!
2. 해결
답변을 요약해서 내 프로젝트에 적용을 해보면 view파일에 th:object="${memberForm}"
라고 적혀져 있어서 타임리프가 memberForm
객체를 가지고 작업을 시작해야 한다. 하지만 Controller에 ModelAttribute를 한것을 보면 이름이 설정되지 않아 기본 이름이 memberFromDto로 설정되어서 오류가 나는 것이었다.
따라서 해결방법은 @ModelAttribute("memberForm")
을 하거나 view파일을 th:object="${memberFormDto}"
로 설정하면 된다.
나는 전자의 방식을 사용했다.
3. 느낀점
문법을 사용할 수 있지만, 아직 제대로 체화가 된것 같지는 않다. 이참에 ModelAttribute와 관련된 내용을 정리해야 겠다.
참고
'개발 > [오류]' 카테고리의 다른 글
CORS와 스프링에서의 해결법 (0) | 2023.05.28 |
---|---|
Redirect URL에 쿼리 파라미터가 생기는 경우 (0) | 2022.04.14 |
Embedded Type Test 문제와 H2 GenerationType 문제 (0) | 2022.04.12 |
테스트 데이터 격리 (0) | 2022.03.18 |
Oauth와 SpringBoot (0) | 2022.02.04 |