Complete guide to creating custom annotations with dynamic error messages in Jakarta Validation and Spring Boot