What problem does it solve? Spring Boot services often accumulate ad-hoc if/throw guard clauses scattered across controllers and services, making validation logic inconsistent, untestable, and hard to maintain. This Skill enforces a canonical two-style validation architecture so every input rule lives in a dedicated, testable validator that surfaces RFC 7807 ProblemDetail 400 responses automatically. ## Core Features & Use Cases - Jakarta ConstraintValidator style: Author custom constraint annotations with Spring-bean-aware validators for field and parameter-level rules, including annotation attribute propagation via initialize() and dynamic violation messages. - Spring Validator style: Implement cross-field and object-level rules registered through a scoped @InitBinder in a ValidationConfig @ControllerAdvice. - Domain rule beans: Extract business logic into pure rule/ package components that validators delegate to, keeping validators thin and unit-testable. - OpenAPI redundancy check: Decision tree to avoid writing custom validators for constraints OpenAPI schema already expresses (enums, ranges, patterns, formats). - Use Case: When adding an endpoint that must verify an entity ID is editable before an update, create an @EditableEntityId annotation, a ConstraintValidator delegating to an EntityEditabilityRule bean, and a component test asserting the 400 ProblemDetail response. ## Quick Start Apply the input-validation skill to add a custom validation rule for the new endpoint in my Spring Boot controller.