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;
}
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ą.