@Valid Запрос JSON с BindingResult вызывает исключение IllegalStateException

У меня есть служба REST, которая принимает запросы JSON. Я хочу проверить значения поступающих запросов JSON. Как я могу это сделать?

В Spring 3.1.0 RELEASE , Я знаю, что кто-то хочет убедиться, что они используют последние классы поддержки, перечисленные в 3.1.13 Новые классы поддержки на основе HandlerMethod для обработки аннотированных контроллеров

К старым относятся такие элементы, как: Annotatio nMethodHandlerAdapter . Я хочу убедиться, что использую последнюю версию, например RequestMappingHandlerAdapter .

Это потому, что я надеюсь, что это решит проблему, в которой я вижу следующее:

java.lang.IllegalStateException: аргумент Errors / BindingResult объявлен без предшествующего атрибута модели.Проверьте подпись вашего метода обработчика!

Мой метод обработчика @Controller и связанный с ним код следующие:

@Autowired FooValidator fooValidator;

@RequestMapping(value="/somepath/foo", method=RequestMethod.POST)
public @ResponseBody Map fooBar(
        @Valid @RequestBody Map 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 для запроса JSON или использования отдельного валидатора вместо пользовательского компонента с проверочной аннотацией (как вы это делаете для запроса JSON?). Все, что может подтвердить запрос JSON.

10
задан skaffman 25 January 2012 в 13:38
поделиться