spring bootで入力フォームを実装中にエラーがでたのでメモ。
問題
エラー内容
①org.attoparser.ParseException: Exception evaluating SpringEL expression
②org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression
③org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field ‘name’ cannot be found on null
原因は③と思われる。
③の日本語訳:プロパティまたはフィールド ‘name’ が null で見つかりません
解決方法
値を取得しようとするとnullが返ってきている。画面は遷移できているようなので表示先(html)の文法誤りと想定。
<変更前>
<body>
<h1>登録内容</h1>
<div>名前:<p style="display:inline" th:text="${Regist.name}"></p></div><br>
<div>カタカナ:<p style="display:inline" th:text="${Regist.reading}"></p></div><br>
<div>誕生日:<p style="display:inline" th:text="${Regist.birthDay}"></p></div><br>
</body>
<変更後>
<body>
<h1>登録内容</h1>
<div>名前:<p style="display:inline" th:text="${regist.name}"></p></div><br>
<div>カタカナ:<p style="display:inline" th:text="${regist.reading}"></p></div><br>
<div>誕生日:<p style="display:inline" th:text="${regist.birthDay}"></p></div><br>
</body>
メモ
⚫︎spring bootのエラーはCaused by〜以降を見ないといけない。
⚫︎Whitelabel Error Pageエラーはよく起きるエラー。
⚫︎ハンドラーメソッドの引数を「@ModelAttribute Regist r」としている場合、modelから値を取得するにはRegistの先頭文字を小文字にした regist.~ と記載すれば値を取得できる。(ハンドラーメソッドを作成するときにRegistクラスを引数にする)
エラー内容は以下。
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Thu Jul 11 21:27:54 JST 2024
There was an unexpected error (type=Internal Server Error, status=500).
An error happened during template parsing (template: "class path resource [templates/regist.html]")
org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/regist.html]")
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:241)
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100)
at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:666)
(省略)
at java.base/java.lang.Thread.run(Thread.java:842)
Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "Regist.name" (template: "regist" - line 9, col 36)
at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:393)
at org.attoparser.MarkupParser.parse(MarkupParser.java:257)
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230)
... 48 more
Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "Regist.name" (template: "regist" - line 9, col 36)
at org.thymeleaf.spring6.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:292)
at org.thymeleaf.standard.expression.VariableExpression.executeVariableExpression(VariableExpression.java:166)
(省略)
at org.attoparser.MarkupParser.parseBuffer(MarkupParser.java:710)
at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:301)
... 50 more
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'name' cannot be found on null
at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:225)
at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:112)
at org.springframework.expression.spel.ast.PropertyOrFieldReference$AccessorValueRef.getValue(PropertyOrFieldReference.java:417)
at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:97)
at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:114)
at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:338)
at org.thymeleaf.spring6.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:265)
... 69 more
⚫︎lombokの機能の@Dataアノテーションによちゲッター・セッターメソッドなどが自動で生成される。
(ゲッターのみ必要な場合は@Getterアノテーションで作成することができる。他も同様)
⚫︎Registクラスはリクエストパラメーターを取得するためのクラス