Property or field ‘〜’ cannot be found on null

エラー ツール・その他

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クラスはリクエストパラメーターを取得するためのクラス

きせる

タクシー運転手を1年経験し、畑違いのエンジニアに転職。エンジニアに向いていないと思いつつ現在3年目。

きせるをフォローする
スポンサーリンク
ツール・その他雑記