Возможно, мой ответ не является исправлением того, который вы ищете, но он, безусловно, проверяет проверку, которую вы пытаетесь выполнить в вашем контроллере.
import in.silentsudo.validators.annotations.RequestMap;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Map;
public class MapParamValidator implements ConstraintValidator<RequestMap, Map<String, String>> {
@Override
public boolean isValid(Map<String, String> stringStringMap, ConstraintValidatorContext constraintValidatorContext) {
return stringStringMap.containsKey("a") || stringStringMap.containsKey("c") || stringStringMap.containsKey("b");
}
}
import in.silentsudo.validators.MapParamValidator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Constraint(validatedBy = {MapParamValidator.class})
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestMap {
String message() default "Invalid Request Map";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Реализация контроллера:
@GetMapping("foo")
public String getFirmwareVersionDifference(
@RequestParam @Valid
@RequestMap
Map<String, String> versions) {
return "OK";
}
Пожалуйста, обязательно добавьте @Validated
на контроллер следующим образом:
@RestController
@Validated
@RequestMapping("/somepath")
public class StatusController {
...
}
Если все работает хорошо, вы должны получить что-то вроде этого
There was an unexpected error (type=Internal Server Error, status=500).
getFirmwareVersionDifference.versions: Invalid Request Map
javax.validation.ConstraintViolationException: getFirmwareVersionDifference.versions: Invalid Request Map
...