Vraag Hoe POST JSON data met Curl van Terminal / Commandline naar Test Spring REST?


Ik gebruik Ubuntu en heb Curl erop geïnstalleerd. Ik wil mijn Spring REST-applicatie testen met Curl. Ik heb mijn POST-code geschreven aan Java-zijde. Ik wil het echter testen met Curl. Ik probeer een JSON-gegevens te plaatsen. Een voorbeeld van gegevens is als volgt:

{"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}

Ik gebruik deze opdracht:

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

Het geeft deze fout als resultaat:

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

De foutbeschrijving is dit:

De server weigerde dit verzoek omdat de aanvraagentiteit een indeling heeft die niet wordt ondersteund door de gevraagde bron voor de gevraagde methode ().

Tomcat-logboek:     "POST / ui / webapp / conf / clear HTTP / 1.1" 415 1051

Eventuele ideeën over het juiste formaat van de opdracht Curl?

BEWERK:

Dit is mijn Java-kant-PUT-code (ik heb GET en DELETE getest en ze werken)

@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;
} 

2042
2017-08-24 08:51


oorsprong


antwoorden:


U moet uw inhoudstype instellen op toepassing / json. Maar -d verzendt het inhoudstype application/x-www-form-urlencoded, wat niet wordt geaccepteerd aan de kant van Spring.

Kijken naar de krul man pagina, Ik denk dat je kunt gebruiken -H:

-H "Content-Type: application/json"

Volledig voorbeeld:

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

(-H is kort voor --header, -d voor --data)

Let daar op -request POST is facultatief als je gebruikt -d, zoals de -d vlag impliceert een POST-aanvraag.


Op Windows zijn de zaken iets anders. Zie de commentaarthread.


3229
2017-08-24 09:12



Probeer je gegevens bijvoorbeeld in een bestand op te slaan body.json en gebruik dan

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

424
2017-08-24 10:04



Misschien vindt u restig nuttig: https://github.com/micha/resty

Het is een wrapper rond CURL die opdrachtregel REST-verzoeken vereenvoudigt. U wijst het naar uw API-eindpunt en het geeft u PUT- en POST-opdrachten. (Voorbeelden aangepast vanaf de startpagina)

$ resty http://127.0.0.1:8080/data #Sets up resty to point at your endpoing
$ GET /blogs.json                  #Gets http://127.0.0.1:8080/data/blogs.json
                                   #Put JSON
$ PUT /blogs/2.json '{"id" : 2, "title" : "updated post", "body" : "This is the new."}'
                                   # POST JSON from a file
$ POST /blogs/5.json < /tmp/blog.json

Ook is het vaak nog steeds nodig om de kopteksten van Content Type toe te voegen. U kunt dit echter één keer doen om een ​​standaardconfiguratiebestand per methode per site in te stellen: Standaard RESTY-opties instellen


86
2018-01-12 19:10



Het werkte voor mij met behulp van:

curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"id":100}' http://localhost/api/postJsonReader.do

Het was gelukkig in kaart gebracht naar de veercontroller:

@RequestMapping(value = "/postJsonReader", method = RequestMethod.POST)
public @ResponseBody String processPostJsonData(@RequestBody IdOnly idOnly) throws Exception {
        logger.debug("JsonReaderController hit! Reading JSON data!"+idOnly.getId());
        return "JSON Received";
}

IdOnly is een eenvoudig POJO met een id-eigenschap.


69
2018-04-19 16:00



Voor Windows, met een enkel citaat voor de -d waarde werkte niet voor mij, maar het werkte wel na het wijzigen in een dubbele aanhalingsteken. Ook moest ik aan dubbele aanhalingstekens binnen accolades ontsnappen.

Dat wil zeggen, het volgende werkte niet:

curl -i -X POST -H "Content-Type: application/json" -d '{"key":"val"}' http://localhost:8080/appname/path

Maar het volgende werkte:

curl -i -X POST -H "Content-Type: application/json" -d "{\"key\":\"val\"}" http://localhost:8080/appname/path

58
2018-06-30 22:12



Maak bijvoorbeeld een JSON-bestand, params.json, en voeg deze inhoud eraan toe:

[
    {
        "environment": "Devel",
        "description": "Machine for test, please do not delete!"
    }
]

Vervolgens voert u deze opdracht uit:

curl -v -H "Content-Type: application/json" -X POST --data @params.json -u your_username:your_password http://localhost:8000/env/add_server

37
2018-01-05 23:10



Dit werkte goed voor mij.

curl -X POST --data @json_out.txt http://localhost:8080/

Waar,

-X Betekent het http-werkwoord.

--data Betekent de gegevens die u wilt verzenden.


31
2017-07-01 14:31



Ik kom net hetzelfde probleem tegen. Ik zou het kunnen oplossen door te specificeren

-H "Content-Type: application/json; charset=UTF-8"

26
2017-11-15 15:45



Gebruik CURL Windows, probeer dit:

curl -X POST -H "Content-Type:application/json" -d "{\"firstName\": \"blablabla\",\"lastName\": \"dummy\",\"id\": \"123456\"}" http-host/_ah/api/employeeendpoint/v1/employee

23
2017-12-20 23:45



Als je veel JSON-verzendingen / antwoorden tegen een RESTful-interface test, wil je misschien de Postbode plug-in voor Chrome (waarmee u webservicetests handmatig kunt definiëren) en de op Node.js gebaseerde Nieuwe man commandoregel-metgezel (waarmee je tests kunt automatiseren met 'verzamelingen' van Postman-tests.) Beide gratis en open!


15
2018-05-23 13:34



Je kunt gebruiken Postbode met zijn intuïtieve GUI om uw cURL opdracht.

  1. Installeren en starten Postbode
  2. Voer uw URL in, post body, verzoek headers etc. pp.
  3. Klik op Code
  4. kiezen cURL uit de vervolgkeuzelijst
  5. kopieer en plak je cURL opdracht

Opmerking: er zijn verschillende opties voor het genereren van geautomatiseerde verzoeken in de vervolgkeuzelijst. Daarom dacht ik dat mijn bericht in de eerste plaats nodig was.


13
2017-09-25 12:47