2015-04-02 16 views
5

ho questo controllore in primaveraPrimavera REST richiesta di controllo posta

@RestController 
public class GreetingController { 

    @RequestMapping(value = "/greeting", method = RequestMethod.POST) 
    public String greeting(@RequestParam("uouo") String uouo) { 
     return uouo; 
    } 
} 

e quando ho testarlo

curl -k -i -X POST -H "Content-Type:application/json" -d uouo=test http://192.168.1.104:8080/api/greeting 

il risultato del test

stato HTTP 400 - Parametro Obbligatorio String ' uouo 'non è presente

Ho provato qualcosa, ma penso che @RequestParam non può essere usato per POST ha sempre passato il parametro in URL usando GET, io uso post solo se ho avuto oggetto JSON come parametro usando @RequestBody, c'è un modo per far inviare parametri stringa usando POST?

risposta

6

Il contenitore Servlet fornirà parametri dal corpo solo per le richieste POST se il tipo di contenuto è application/x-www-form-urlencoded. Ignorerà il corpo se il tipo di contenuto è nient'altro. Questo è specificato nella Servlet Specification Chapter 3.1.1 When Parameters Are Available

Le seguenti sono le condizioni che devono essere soddisfatte prima forma data post saranno popolati al set di parametri:

  1. La richiesta è una richiesta HTTP o HTTPS.
  2. Il metodo HTTP è POST.
  3. Il tipo di contenuto è application/x-www-form-urlencoded.
  4. Il servlet ha effettuato una chiamata iniziale di una qualsiasi famiglia di metodi getParameter sull'oggetto richiesta.

Se le condizioni non sono soddisfatte e i dati del modulo post non è incluso nel set di parametri, i dati post deve essere ancora disponibile per il servlet tramite flusso di input dell'oggetto richiesta. Se le condizioni sono soddisfatte, i dati del modulo di posta non saranno più disponibili per la lettura direttamente da dal flusso di input dell'oggetto richiesta.

Dal momento che non sta inviando alcun JSON, basta impostare il tipo di contenuto appropriato

curl -k -i -X POST -H "Content-Type:application/x-www-form-urlencoded" -d uouo=test http://192.168.1.104:8080/api/greeting 

o lasciare che curl dedurre che

curl -k -i -X POST -d uouo=test http://192.168.1.104:8080/api/greeting?uouo=test 

Nota che si può ancora passare parametri di query in URL

curl -k -i -X POST -H "Content-Type:application/json" http://192.168.1.104:8080/api/greeting?uouo=test 
Problemi correlati