From b2c8af9e06fd512f8ed96585444cdb17b0db792b Mon Sep 17 00:00:00 2001 From: adityamparikh Date: Fri, 24 Apr 2026 14:09:36 -0400 Subject: [PATCH] fix: add fail-fast validation to SolrConfigurationProperties Add @Validated and @NotBlank to SolrConfigurationProperties.url so that missing or empty Solr URL is caught at startup instead of failing at runtime. Add spring-boot-starter-validation dependency to enable Bean Validation. The existing @NullMarked JSpecify annotation on the package already covers the null-safety contract. Signed-off-by: Aditya Parikh Co-Authored-By: Claude Opus 4.6 (1M context) Signed-off-by: adityamparikh --- build.gradle.kts | 1 + gradle/libs.versions.toml | 1 + .../solr/mcp/server/config/SolrConfigurationProperties.java | 5 ++++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index dc878d9d..6805a996 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -121,6 +121,7 @@ dependencies { implementation(libs.spring.boot.starter.web) implementation(libs.spring.boot.starter.actuator) implementation(libs.spring.boot.starter.aop) + implementation(libs.spring.boot.starter.validation) implementation(libs.spring.ai.starter.mcp.server.webmvc) implementation(libs.solr.solrj) implementation(libs.commons.csv) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7f2d2e01..522f46a9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -30,6 +30,7 @@ spring-boot-starter-web = { module = "org.springframework.boot:spring-boot-start spring-boot-starter-actuator = { module = "org.springframework.boot:spring-boot-starter-actuator" } spring-boot-starter-aop = { module = "org.springframework.boot:spring-boot-starter-aop" } spring-boot-starter-security = { module = "org.springframework.boot:spring-boot-starter-security" } +spring-boot-starter-validation = { module = "org.springframework.boot:spring-boot-starter-validation" } spring-boot-starter-oauth2-resource-server = { module = "org.springframework.boot:spring-boot-starter-oauth2-resource-server" } spring-boot-docker-compose = { module = "org.springframework.boot:spring-boot-docker-compose" } spring-boot-starter-test = { module = "org.springframework.boot:spring-boot-starter-test" } diff --git a/src/main/java/org/apache/solr/mcp/server/config/SolrConfigurationProperties.java b/src/main/java/org/apache/solr/mcp/server/config/SolrConfigurationProperties.java index 37d458b7..e7c4381d 100644 --- a/src/main/java/org/apache/solr/mcp/server/config/SolrConfigurationProperties.java +++ b/src/main/java/org/apache/solr/mcp/server/config/SolrConfigurationProperties.java @@ -16,7 +16,9 @@ */ package org.apache.solr.mcp.server.config; +import jakarta.validation.constraints.NotBlank; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.validation.annotation.Validated; /** * Spring Boot Configuration Properties record for Apache Solr connection @@ -113,6 +115,7 @@ * @see org.springframework.boot.context.properties.ConfigurationProperties * @see org.springframework.boot.context.properties.EnableConfigurationProperties */ +@Validated @ConfigurationProperties(prefix = "solr") -public record SolrConfigurationProperties(String url) { +public record SolrConfigurationProperties(@NotBlank String url) { }