From e99791f2894fed50179c7788592829dc5da54403 Mon Sep 17 00:00:00 2001 From: Samuel Gulliksson Date: Wed, 5 Nov 2025 07:58:40 +0100 Subject: [PATCH] Improve i18n-support for NoResourceFoundException. Return the requested resource as ErrorResponse.getDetailMessageArguments, making it usable with message customization and i18n. See gh-35758 Signed-off-by: Samuel Gulliksson --- .../ROOT/pages/web/webmvc/mvc-ann-rest-exceptions.adoc | 2 +- .../web/servlet/resource/NoResourceFoundException.java | 4 ++++ .../web/servlet/resource/NoResourceFoundExceptionTests.java | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-ann-rest-exceptions.adoc b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-ann-rest-exceptions.adoc index 6fb85ed96f4..ed4ad5506c6 100644 --- a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-ann-rest-exceptions.adoc +++ b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-ann-rest-exceptions.adoc @@ -171,7 +171,7 @@ Message codes and arguments for each error are also resolved via `MessageSource` | `NoResourceFoundException` | (default) -| +| `+{0}+` the resource | `TypeMismatchException` | (default) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/NoResourceFoundException.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/NoResourceFoundException.java index 593e33ef73f..12c00161e20 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/NoResourceFoundException.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/NoResourceFoundException.java @@ -78,4 +78,8 @@ public class NoResourceFoundException extends ServletException implements ErrorR return this.body; } + @Override + public Object[] getDetailMessageArguments() { + return new String[]{this.resourcePath}; + } } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/NoResourceFoundExceptionTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/NoResourceFoundExceptionTests.java index 56cf687c1fa..7d7950ad9a4 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/NoResourceFoundExceptionTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/NoResourceFoundExceptionTests.java @@ -40,4 +40,9 @@ class NoResourceFoundExceptionTests { assertThat(noResourceFoundException.getBody().getDetail()).isEqualTo("No static resource /resource."); } + @Test + void messageArgumentsShouldContainResourcePath() { + var noResourceFoundException = new NoResourceFoundException(HttpMethod.GET, "/context/resource", "/resource"); + assertThat(noResourceFoundException.getDetailMessageArguments()).containsExactly("/resource"); + } }