Validators do not work with Spring and TomEE without Maven or Grade.
I created an elementary project. When I enter incorrect data, the validator simply does nothing (no
@PathVariable
is not meant to be validated in order to send back a readable message to the user. As principle a pathVariable should never be invalid.
If a pathVariable is invalid the reason can be a bug generated a bad url (an href in jsp for example). No @Valid
is needed and no message is needed, just fix the code;
"the user" is manipulating the url. Again, no @Valid
is needed, no meaningful message to the user should be given.
In both cases just leave an exception bubble up until it is catched by the usual Spring ExceptionHandlers in order to generate a nice error page or a meaningful json response indicating the error. In order to get this result you can do some validation using custom editors
Still You want to validate PathVariable you can use org.springframework.validation.annotation.Validated
to valid RequestParam
or PathVariable
Init ValidationConfig
@Configuration
public class ValidationConfig {
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
MethodValidationPostProcessor processor = new MethodValidationPostProcessor();
return processor;
}
}
Add @Validated
to your controller handler class, Like :
@RestController
@Validated
public class RestSpring {
....
}
Add validators to your handler method:
@RequestMapping(value = "/crea/{cogome}/{nome}/{eta}/{altezza}", produces = "application/json")
public PersonaDTO creaPersona(
@PathVariable("cogome") @Pattern(regexp = "[A-Z]+[a-z][a-z]+") @Valid String strCognome,
@PathVariable("nome") @Valid @Pattern(regexp = "[A-Z]+[a-z][a-z]+") String strNome,
@PathVariable("eta") int intEta,
@PathVariable("altezza") int intAletezza)
{
PersonaDTO persona=new PersonaDTO(strCognome,strNome,intEta,intAletezza);
return persona;
}