Build Spring Boot 4.0 applications - project setup, REST controllers, dependency injection, configuration, actuator, and testing
91
90%
Does it follow best practices?
Impact
97%
1.79xAverage score across 3 eval scenarios
Passed
No known issues
{
"context": "An agent is asked to set up typed configuration, correct Jackson settings, profile-based configuration, and write integration tests for a Spring Boot 4 application. The evaluation checks correct use of Boot 4 ConfigurationProperties patterns, Jackson property naming, test annotations, and OpenTelemetry starter usage.",
"type": "weighted_checklist",
"checklist": [
{
"name": "Record-based ConfigurationProperties",
"description": "Configuration is bound using a record annotated with @ConfigurationProperties rather than a mutable class with getters/setters",
"max_score": 9
},
{
"name": "@DefaultValue on record components",
"description": "Default values on the configuration record use @DefaultValue annotation (not Java field initializers or constructor defaults)",
"max_score": 7
},
{
"name": "ConfigurationPropertiesScan or EnableConfigurationProperties",
"description": "@ConfigurationPropertiesScan is on the main class OR @EnableConfigurationProperties is on a config class to register the properties bean",
"max_score": 7
},
{
"name": "Jackson json.write property path",
"description": "Jackson write properties use the 'spring.jackson.json.write.*' namespace (e.g., spring.jackson.json.write.indent-output=true), not 'spring.jackson.write.*'",
"max_score": 9
},
{
"name": "Jackson json.read property path",
"description": "If Jackson read configuration is set, it uses 'spring.jackson.json.read.*' namespace, not 'spring.jackson.read.*'",
"max_score": 7
},
{
"name": "Profile-specific property files",
"description": "Profile-specific configuration uses files named application-{profile}.properties or application-{profile}.yaml",
"max_score": 6
},
{
"name": "MockitoBean in tests",
"description": "Integration tests use @MockitoBean (not @MockBean which was removed) to mock Spring beans",
"max_score": 10
},
{
"name": "AutoConfigureMockMvc annotation",
"description": "@AutoConfigureMockMvc is present alongside @SpringBootTest when MockMvc is autowired in tests",
"max_score": 9
},
{
"name": "OpenTelemetry starter used",
"description": "If distributed tracing is needed, the dependency uses 'spring-boot-starter-opentelemetry' (not a manual OTel configuration or older spring-cloud-sleuth)",
"max_score": 7
},
{
"name": "tracing.export.enabled property",
"description": "If tracing is configured, the property 'management.tracing.export.enabled' is used (not 'management.tracing.enabled')",
"max_score": 7
},
{
"name": "Constructor injection in beans",
"description": "Beans receiving @ConfigurationProperties via injection use constructor injection without @Autowired",
"max_score": 6
},
{
"name": "Boot 4 version in build",
"description": "The Spring Boot version in the build file is 4.0.5",
"max_score": 5
},
{
"name": "JSpecify Nullable used",
"description": "If @Nullable is used anywhere, it imports from 'org.jspecify.annotations.Nullable'",
"max_score": 5
}
]
}