diff --git a/stockscope/src/main/java/com/sharecomparison/presentation/WebPageController.java b/stockscope/src/main/java/com/sharecomparison/presentation/WebPageController.java index 1801159..cc5a273 100644 --- a/stockscope/src/main/java/com/sharecomparison/presentation/WebPageController.java +++ b/stockscope/src/main/java/com/sharecomparison/presentation/WebPageController.java @@ -2,10 +2,13 @@ import java.time.LocalDate; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; import com.sharecomparison.application.IPriceController; import com.sharecomparison.domain.ComparisonResult; @@ -32,12 +35,12 @@ public String showForm(Model model) { public String compare( @RequestParam String symbol1, @RequestParam String symbol2, - @RequestParam(required = false) String startDate, - @RequestParam(required = false) String endDate, + @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate, + @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate, Model model) { - LocalDate start = (startDate != null && !startDate.isBlank()) ? LocalDate.parse(startDate) : LocalDate.now().minusYears(1); - LocalDate end = (endDate != null && !endDate.isBlank()) ? LocalDate.parse(endDate) : LocalDate.now(); + LocalDate start = (startDate != null) ? startDate : LocalDate.now().minusYears(1); + LocalDate end = (endDate != null) ? endDate : LocalDate.now(); symbol1 = symbol1.trim().toUpperCase(); symbol2 = symbol2.trim().toUpperCase(); @@ -70,4 +73,22 @@ public String compare( return "index"; } + + @ExceptionHandler(MethodArgumentTypeMismatchException.class) + public String handleDateParseError(MethodArgumentTypeMismatchException ex, Model model) { + String paramName = ex.getName(); + if (LocalDate.class.equals(ex.getRequiredType()) + && ("startDate".equals(paramName) || "endDate".equals(paramName))) { + model.addAttribute("error", + "Invalid date format for '" + paramName + "'. Please use YYYY-MM-DD (e.g. 2024-01-15)."); + } else { + model.addAttribute("error", "Invalid value for parameter '" + paramName + "'."); + } + model.addAttribute("symbol1", "AAPL"); + model.addAttribute("symbol2", "MSFT"); + model.addAttribute("startDate", LocalDate.now().minusYears(1).toString()); + model.addAttribute("endDate", LocalDate.now().toString()); + return "index"; + } +} }