Používam Ubuntu a nainštaloval som na ňom cURL. Chcem otestovať svoju aplikáciu Spring REST pomocou cURL. Svoj POST kód som napísal na strane Javy. Chcem ho však otestovať pomocou cURL. Snažím sa odoslať údaje JSON. Príklad údajov je takýto:
{"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}
Používam tento príkaz:
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
Vráti to túto chybu:
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
Popis chyby je nasledovný:
Server odmietol túto požiadavku, pretože entita požiadavky je vo formáte, ktorý požadovaný zdroj nepodporuje pre požadovanú metódu ().
Protokol Tomcat: "POST /ui/webapp/conf/clear HTTP/1.1" 415 1051
Aký je správny formát príkazu cURL?
Toto je môj kód PUT
na strane Java (testoval som GET a DELETE a fungujú):
@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;
}
Musíte nastaviť typ obsahu na application/json. Ale -d
posiela Content-Type application/x-www-form-urlencoded
, ktorý nie je na strane Spring's akceptovaný.
Pri pohľade na curl man page si myslím, že môžete použiť -H
:
-H "Content-Type: application/json"
Úplný príklad:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"username":"xyz","password":"xyz"}' \
http://localhost:3000/api/login
(-H
je skratka pre --header
, -d
pre --data
)
Všimnite si, že -request POST
je nepovinné, ak použijete -d
, pretože príznak -d
znamená požiadavku POST.
V systéme Windows je situácia trochu odlišná. Pozrite si vlákno s komentármi.