Kaip iš terminalo / komandinės eilutės į "Spring REST" testą siųsti JSON duomenis naudojant Curl?

Aš naudoju Ubuntu ir joje įdiegiau cURL. Noriu išbandyti savo "Spring REST" programą naudodamas cURL. Savo POST kodą parašiau "Java" pusėje. Tačiau noriu jį išbandyti su cURL. Bandau išsiųsti JSON duomenis. Duomenų pavyzdys yra toks:

{"value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true}

Naudoju šią komandą:

curl -i \
    -H "Accept: application/json" \
    -H "X-HTTP-Method-Override: PUT" \
    -X POST -d "value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true \
    http://localhost:8080/xx/xxx/xxxx

Ji grąžina šią klaidą:

HTTP/1.1 415 Unsupported Media Type
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Length: 1051
Date: Wed, 24 Aug 2011 08:50:17 GMT

Klaidos aprašymas yra toks:

  • Serveris atmetė šią užklausą, nes užklausos objektas yra tokio formato, kurio nepalaiko prašomasis išteklius prašomam metodui ().*

Tomcat žurnalas: "POST /ui/webapp/conf/clear HTTP/1.1" 415 1051

Koks yra tinkamas cURL komandos formatas?

Tai yra mano Java pusės PUT kodas (išbandžiau GET ir DELETE ir jie veikia):

@RequestMapping(method = RequestMethod.PUT)
public Configuration updateConfiguration(HttpServletResponse response, @RequestBody Configuration configuration) { //consider @Valid tag
    configuration.setName("PUT worked");
    //todo If error occurs response.sendError(HttpServletResponse.SC_NOT_FOUND);
    return configuration;
}
Sprendimas

Turite nustatyti turinio tipą application/json. Tačiau d siunčia Content-Type application/x-www-form-urlencoded, kuris nėra priimtinas "Spring's" pusėje.

Žiūrėdamas į curl man page, manau, kad galite naudoti -H:

-H "Content-Type: application/json"

Pilnas pavyzdys:

curl --header "Content-Type: application/json" \
  --request POST \
  --data '{"username":"xyz","password":"xyz"}' \
  http://localhost:3000/api/login

(-H reiškia --header, -d - --data)

Atkreipkite dėmesį, kad -request POST yra neprivaloma, jei naudojate -d, nes -d vėliava reiškia POST užklausą.


Windows sistemoje viskas šiek tiek kitaip. Žr. komentarų temą.

Komentarai (26)

Pabandykite duomenis įrašyti į failą, tarkime, body.json, ir tada naudokite

curl -H "Content-Type: application/json" --data @body.json http://localhost:8080/ui/webapp/conf
Komentarai (10)

Ką tik susidūriau su ta pačia problema. Galėčiau ją išspręsti nurodydamas

-H "Content-Type: application/json; charset=UTF-8"
Komentarai (0)