I've recently become more fond of javax validation annotations and creating custom ones when I feel they may be appropriate. But... I can't figure if it's design-appropriate to use them for everything.
I have a REST api created using Spring Framework (Spring Boot 2 to be more specific) where I'd like to validate every field that comes through POST endpoints in my controllers. The body is written in a separate class and contains some simple javax.validation annotations such as @NotEmpty, @Size etc.
Now, for example... An endpoint for user registration should validate whether user's desired username and email address is unique. I thought about creating custom annotations (interfaces - validators) for these so I can simply add the annotation above the field I want to validate, but I'm not sure if this is appropriate. If I want to validate field's uniqueness, I will have to autowire a repository that my application is using and check if provided email or username already exists. However, this means my @Service is only good for contacting the repository in many occassions if everything is validated through validation annotations.
So my question is - should field validations for (e.g.) uniqueness be written in a @Service or javax annotations? What's more appropriate?