Wie bekomme ich eine Feder @RestController zu akzeptieren-Parameter im JSON-format anstatt im www-form-urlencoded?

Mit Spring 4.1.7 auf JDK 1.8, ich habe eine @RestController Klasse, die wie folgt aussieht:

@RestController
public class ServiceAController {

    public static final Logger LOG = Logger.getLogger(ServiceAController.class);

    @RequestMapping(value="/rest/servicea", method=RequestMethod.POST)
    public ServiceAResponse serviceA(@RequestParam(value="parmA", defaultValue="defaultParmA") String parmA,
            @RequestParam(value="parmB", defaultValue="defaultParmB") String parmB,
            @RequestParam(value="parmC", defaultValue="defaulParmC") String parmC) {
        LOG.info("Inside Service A handler: " + parmA + " B: "+ parmB + " C: "+ parmC);
}

Wenn ich ein POST /rest/servicea aus einem javascript, wie dies alles funktioniert, und ich sehe die Werte "a", "b" und "c" gedruckt in meinem log:

    var data = {        
        "parmA": "a",
        "parmB": "b",
        "parmC": "c"
    }

    $.ajax({
        type: "POST",
        url: "./rest/servicea",
        contentType: "application/x-www-form-urlencoded",
        data: data,
        dataType: "json",
        success: submitAuthSuccess,
        error: submitAuthFailure 
    })

Jedoch, wenn ich versuche, ändern Sie den Aufruf von javascript, um diese (um das Protokoll zu ändern, um AUSZURUHEN, anstatt www-urlencode), bekomme ich die Standard-Werte (defaultParmA, defaultParmB, defaultParmC) in meinem log:

    var data = {        
        "parmA": "a",
        "parmB": "b",
        "parmC": "c"
    }

    $.ajax({
        type: "POST",
        url: "./rest/servicea",
        contentType: "application/json",
        data: JSON.stringify(data),
        dataType: "json",
        success: submitAuthSuccess,
        error: submitAuthFailure 
    })

Ich glaube, ich bin etwas fehlt in der @RestController Klasse, um es zum Parsen der JSON-statt zu erwarten, dass www-urlencoded Daten.

Ich versucht, die änderung der @RequestMapping annotation auf der serviceA Methode zum hinzufügen von consumes="application/json" Attribut, aber das hatte keine Wirkung.

Was kann ich ändern, um diese Arbeit zu machen, mit JSON statt urlencoded Daten in den POST-body?

  • Es scheint, Sie haben missverstanden, was ein request-parameter darstellt. Es ist entweder ein query-parameter oder von einem parameter. Du bist nicht zu schicken, entweder in deinem zweiten Beispiel.
InformationsquelleAutor Jared | 2015-08-01
Schreibe einen Kommentar