@Gültiges JSON-Anfrage mit BindingResult Ursachen IllegalStateException

Ich habe einen REST-service, der JSON-Anfrage. Ich will zur Validierung der JSON-Anfrage Werte, die kommen in. Wie kann ich das tun?

Im Frühjahr 3.1.0 RELEASE, ich weiß, man will zu machen sicher Sie sind mit der neuesten support-Klassen, aufgeführt im 3.1.13 Neue HandlerMethod-basierte Support-Klassen Für die Anmerkungen Controller-Verarbeitung

Die alten Elemente wie: AnnotationMethodHandlerAdapter. Ich will zu machen sicher, ich bin mit dem neuesten wie RequestMappingHandlerAdapter.

Dies ist, weil ich hoffe, es behebt ein Problem, wo ich sehen:

java.lang.IllegalStateException: Fehler/BindingResult argument deklariert, ohne vorhergehende Modell-Attribut. Überprüfen Sie Ihre handler-Methode Signatur!

Meine @Controller handler-Methode und zugehörige code ist:

@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 sieht wie folgt aus:

@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);
    }
}

Wenn ich entfernen Sie die BindingResult funktioniert alles einwandfrei, außer, dass ich nicht in der Lage zu sagen, wenn der JSON-validiert.

Ich bin nicht stark befestigt, um das Konzept der Verwendung einer Map<String, String> für das JSON-request oder über einen separaten validator im Gegensatz zu einer Benutzerdefinierten Bean mit validation-annotation (Wie machst du das, dass für ein JSON-Anfrage?). Was auch immer überprüfen kann, ob der JSON-Anfrage.

Wir denken, dass, wenn wir irgendwie sicherstellen, dass wir mit den neueren Klassen wie RequestMappingHandlerAdapter dann könnte dies funktionieren. Wie Sie dies einrichten ODER gibt es eine andere gute Lösung für dieses problem?

InformationsquelleAutor finneycanhelp | 2012-01-25

Schreibe einen Kommentar