I have tried a number of examples from the net and cannot get Spring to validate my query string parameter. It doesn\'t seem execute the REGEX / fail.
packag
You need add @Validated to your class like this:
@RestController
@Validated
class Controller {
// ...
}
UPDATE:
you need to configure it properly.. add this bean to your context:
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
Example to handle exception:
@ControllerAdvice
@Component
public class GlobalExceptionHandler {
@ExceptionHandler
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Map handle(MethodArgumentNotValidException exception) {
return error(exception.getBindingResult().getFieldErrors()
.stream()
.map(FieldError::getDefaultMessage)
.collect(Collectors.toList()));
}
@ExceptionHandler
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Map handle(ConstraintViolationException exception) {
return error(exception.getConstraintViolations()
.stream()
.map(ConstraintViolation::getMessage)
.collect(Collectors.toList()));
}
private Map error(Object message) {
return Collections.singletonMap("error", message);
}
}
You can try this
@Pattern(regexp="^[0-9]+(,[0-9]+)*$")
private static final String VALIDATION_REGEX;
(pay attention for the final modifier) or else
@Pattern()
private static final String VALIDATION_REGEX = "^[0-9]+(,[0-9]+)*$";
And then remove @Pattern(regexp = VALIDATION_REGEX) from your method and keep only the @Valid annotation:
public myResonseObject getMyParams(@PathVariable("id") String id, @Valid @RequestParam(value = "myparam", required = true) String myParam) {
You have incorrect regex
"^[0-9]+(,[0-9]+)*$"
It will never parse
1,bob
Maybe, you need:
"^\w+(,\w+)*$"
And if you need to parse also an empty line, use:
"^(\w+(,\w+)*)?$"