From 0bacd0367fd86888072519737b211b87a3fca3a6 Mon Sep 17 00:00:00 2001 From: nirsa Date: Thu, 3 Apr 2025 12:19:26 +0900 Subject: [PATCH] Fix: add explicit names to @RequestParam and @PathVariable annotations to prevent runtime exception Spring Framework 6+ requires parameter name reflection or explicitly named annotations. This commit adds missing `name = "..."` attributes to all @RequestParam and @PathVariable usages across controller classes. Affected controllers: - OwnerController - PetController - VisitController - VetController This change prevents the following runtime error: IllegalArgumentException: Name for argument of type [int] not specified... The application now builds and runs cleanly with `./gradlew clean build`. Signed-off-by: nirsa --- .../samples/petclinic/owner/OwnerController.java | 2 +- .../samples/petclinic/owner/PetController.java | 4 ++-- .../samples/petclinic/owner/VisitController.java | 2 +- .../springframework/samples/petclinic/vet/VetController.java | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java b/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java index fa3506456..fea551025 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java @@ -90,7 +90,7 @@ class OwnerController { } @GetMapping("/owners") - public String processFindForm(@RequestParam(defaultValue = "1") int page, Owner owner, BindingResult result, + public String processFindForm(@RequestParam(name="page", defaultValue = "1") int page, Owner owner, BindingResult result, Model model) { // allow parameterless GET request for /owners to return all records if (owner.getLastName() == null) { diff --git a/src/main/java/org/springframework/samples/petclinic/owner/PetController.java b/src/main/java/org/springframework/samples/petclinic/owner/PetController.java index 3234e39d6..b38d98de6 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/PetController.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/PetController.java @@ -119,12 +119,12 @@ class PetController { } @GetMapping("/pets/{petId}/edit") - public String initUpdateForm() { + public String initUpdateForm(@PathVariable("petId") int petId) { return VIEWS_PETS_CREATE_OR_UPDATE_FORM; } @PostMapping("/pets/{petId}/edit") - public String processUpdateForm(Owner owner, @Valid Pet pet, BindingResult result, + public String processUpdateForm(@PathVariable("petId") int petId, Owner owner, @Valid Pet pet, BindingResult result, RedirectAttributes redirectAttributes) { String petName = pet.getName(); diff --git a/src/main/java/org/springframework/samples/petclinic/owner/VisitController.java b/src/main/java/org/springframework/samples/petclinic/owner/VisitController.java index b546f609a..c17a149ae 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/VisitController.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/VisitController.java @@ -85,7 +85,7 @@ class VisitController { // Spring MVC calls method loadPetWithVisit(...) before processNewVisitForm is // called @PostMapping("/owners/{ownerId}/pets/{petId}/visits/new") - public String processNewVisitForm(@ModelAttribute Owner owner, @PathVariable int petId, @Valid Visit visit, + public String processNewVisitForm(@ModelAttribute Owner owner, @PathVariable("petId") int petId, @Valid Visit visit, BindingResult result, RedirectAttributes redirectAttributes) { if (result.hasErrors()) { return "pets/createOrUpdateVisitForm"; diff --git a/src/main/java/org/springframework/samples/petclinic/vet/VetController.java b/src/main/java/org/springframework/samples/petclinic/vet/VetController.java index 29fcecc7a..227375ec1 100644 --- a/src/main/java/org/springframework/samples/petclinic/vet/VetController.java +++ b/src/main/java/org/springframework/samples/petclinic/vet/VetController.java @@ -42,7 +42,7 @@ class VetController { } @GetMapping("/vets.html") - public String showVetList(@RequestParam(defaultValue = "1") int page, Model model) { + public String showVetList(@RequestParam(name="page", defaultValue = "1") int page, Model model) { // Here we are returning an object of type 'Vets' rather than a collection of Vet // objects so it is simpler for Object-Xml mapping Vets vets = new Vets();