template parsing error

Ryu·2023년 2월 20일
0

JPA

목록 보기
3/4

[ Thymeleaf Parsing Error ]


자주 발생하는 에러

Thymeleaf 는 스프링과 Integration 이 잘 되어 있고, 지원하는 기능들도 많아서 자주 쓰이는 템플릿 엔진 중 하나이다. 이번에는 Thymeleaf 를 사용하면서 빈번하게 맞닥뜨리는 에러에 대해 소개해보려 한다. 개인적으로도 Thymeleaf 를 사용하면서 가장 많이 만났던 에러이다.

There was an unexpected error (type=Internal Server Error, status=500).
An error happened during template parsing (template: "class path resource [templates/member/createMemberForm.html]")

실제로 Thymeleaf 를 사용해보면, 가장 많이 마주치는 에러가 바로 파싱 에러다.
html 의 파라미터 철자가 틀렸거나, 객체를 잘못 넘겨주거나 등등 수 많은 이유로 발생해서 이유를 찾는데 시간이 좀 소요된다.

Dto 에서 @Setter 의 부재

Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'memberForm' available as request attribute

이번에 내가 마주친 에러는 객체 자체를 사용할 수 없다는 것이었다.
MemberForm 이라는 객체를 사용할 수 없다는 것이었다.

Template 에서 객체 필드 접근하는 경우

Property or field 'city' cannot be found on object of type
=> 다음은 실제로 발생하는 오류이다.

<th: text = "${member.address.city}">
  • 실제로 이런 식으로 member.address.city 로 접근하는 경우가 많다.
  • Thymeleaf 에서 저렇게 참조형식으로 사용할 때에는, 항상 @Getter 를 통해서 값을 가져온다. 따라서, @Getter 를 만들어두지 않으면, 오류가 발생한다.

원인

  • 요청으로 서버에 보낼 때, 등록 폼에 작성한 내용들이 MemberForm 에 바인딩 되어 서버로 전달되는 것이다.
  • 따라서, 서버에서 MemberForm 을 파라미터로 받아서 회원등록을 진행해주려면 폼에서 입력한 값을 받아와야 한다는 것.
  • 그러나 setter 메서드가 없어서, 값을 입력해도 객체에 바인딩되지 못했던 것.
  • Template 에서 객체 필드 접근도 마찬가지이다. 이 때에는 getter 메서드가 없어서 값을 가져오지 못한 것.

해결

  • Lombok 의 @Setter 또는 @Getter 를 붙여서 해결.
    해결과정은 너무도 간단했지만 너무 자주 마주친 에러라 정리해보았다.
profile
Strengthen the core.

0개의 댓글