У меня есть служба REST, которая принимает запрос JSON. Я хочу проверить поступающие значения запросов JSON. Как я могу это сделать?
В Spring 3.1.0 RELEASE я знаю, что нужно убедиться, что они используют последние классы поддержки, перечисленные в 3.1.13 Новые классы поддержки на основе HandlerMethod для обработки аннотированных контроллеров
Старые - это такие вещи, как: AnnotationMethodHandlerAdapter
. Я хочу убедиться, что я использую последнюю версию, такую как RequestMappingHandlerAdapter
.
Это потому, что я надеюсь, что это исправит проблему, где я вижу это:
java.lang.IllegalStateException: Аргументы Errors / BindingResult объявлены без предшествующего атрибута модели. Проверьте подпись метода вашего обработчика!
Мой @Controller
метод обработчика и связанный с ним код:
@Autowired FooValidator fooValidator;
@RequestMapping(value="/somepath/foo", method=RequestMethod.POST)
public @ResponseBody Map<String, String> fooBar(
@Valid @RequestBody Map<String, String> specificRequest,
BindingResult results) {
out("fooBar called");
// get vin from JSON (reportRequest)
return null;
}
@InitBinder("specificRequest") // possible to leave off for global behavior
protected void initBinder(WebDataBinder binder){
binder.setValidator(fooValidator);
}
FooValidator
выглядит так:
@Component
public class FooValidator implements Validator {
public boolean supports(Class<?> clazz) {
out("supports called ");
return Map.class.equals(clazz);
}
public void validate(Object target, Errors errors) {
out("validate called ");
}
private void out(String msg) {
System.out.println("****** " + getClass().getName() + ": " + msg);
}
}
Если я удаляю BindingResult
, все работает нормально, за исключением того, что я не смогу определить, проверен ли JSON.
Я не сильно привязан к концепции использования Map<String, String>
для запроса JSON или использования отдельного валидатора в отличие от пользовательского компонента с аннотацией проверки (как это сделать для запроса JSON?). Все, что может подтвердить запрос JSON.