Eu uso o Ubuntu e instalei o cURL nele. Quero testar meu aplicativo Spring REST com cURL. Eu escrevi meu código POST no lado Java. No entanto, quero testá-lo com cURL. Estou tentando postar dados JSON. Os dados de exemplo são assim:
{"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}
Eu uso este comando:
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
Retorna este erro:
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
A descrição do erro é esta:
O servidor recusou esta solicitação porque a entidade da solicitação está em um formato não suportado pelo recurso solicitado para o método solicitado ().
Log do Tomcat: "POST / ui / webapp / conf / clear HTTP / 1.1" 415 1051
Qual é o formato correto do comando cURL?
Este é o meu PUT
código lateral Java (eu testei GET e DELETE e eles funcionam):
@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;
}
json
rest
spring-mvc
curl
http-headers
kamaci
fonte
fonte
Respostas:
Você precisa definir seu tipo de conteúdo como application / json. Mas
-d
envia o tipo de conteúdoapplication/x-www-form-urlencoded
, que não é aceito no lado do Spring.Olhando para a página de manual curl , acho que você pode usar
-H
:Exemplo completo:
(
-H
é abreviação de--header
,-d
para--data
)Observe que isso
-request POST
é opcional se você usar-d
, pois o-d
sinalizador implica uma solicitação POST.No Windows, as coisas são um pouco diferentes. Veja o tópico do comentário.
fonte
curl -X POST -H "Content-Type: application/json" -d "{ \"key1\": \"value1\" }" http://localhost:3000/api/method
"{ """key1""": """value1""" }"
. Também esta resposta: stackoverflow.com/questions/18314796/…Tente colocar seus dados em um arquivo, diga
body.json
e usefonte
--data-binary
opção em vez de--data
. Seria de esperar que o cliente envie os dados como estão, mas--data
retira CR e LF da entrada.@
caractere antes do nome do arquivo, caso contrário não funcionará. Eu passei apenas 20 minutos batendo a cabeça no essa porcaria ...Você pode achar bastante útil: https://github.com/micha/resty
É um wrapper round CURL que simplifica as solicitações REST da linha de comando. Você o aponta para o terminal da API e fornece os comandos PUT e POST. (Exemplos adaptados da página inicial)
Além disso, muitas vezes ainda é necessário adicionar os cabeçalhos do tipo de conteúdo. Você pode fazer isso uma vez, no entanto, para definir um padrão, para adicionar arquivos de configuração por método por site: Definindo opções padrão de RESTY
fonte
Para o Windows, ter uma citação única para o
-d
valor não funcionou para mim, mas funcionou após a alteração para aspas duplas. Também precisava escapar de aspas duplas dentro de colchetes.Ou seja, o seguinte não funcionou:
Mas o seguinte funcionou:
fonte
Funcionou para mim usando:
Felizmente, foi mapeado para o controlador Spring:
IdOnly
é um POJO simples com uma propriedade id.fonte
Como exemplo, crie um arquivo JSON, params.json, e adicione este conteúdo a ele:
Então você executa este comando:
fonte
Acabei de encontrar o mesmo problema. Eu poderia resolvê-lo especificando
fonte
Isto funcionou bem para mim.
Onde,
-X
Significa o verbo http.--data
Significa os dados que você deseja enviar.fonte
-X POST
é redundante neste exemploVocê pode usar o Postman com sua GUI intuitiva para montar seu
cURL
comando.Code
cURL
na lista suspensacURL
comandoNota: Existem várias opções para geração automatizada de solicitações na lista suspensa, razão pela qual pensei que minha postagem era necessária em primeiro lugar.
fonte
Usando o CURL Windows, tente o seguinte:
fonte
Você pode usar o carteiro para converter em CURL
fonte
HTTPie é uma alternativa recomendada
curl
porque você pode fazer apenasEle fala JSON por padrão e manipula a configuração do cabeçalho necessário para você, assim como a codificação de dados como JSON válido. Há também:
para cabeçalhos e
para parâmetros de string de consulta. Se você possui uma grande quantidade de dados, também pode lê-los em um arquivo, se estes estiverem codificados em JSON:
fonte
Se você estiver testando muitas respostas / envios JSON em uma interface RESTful, consulte o plug-in Postman para Chrome (que permite definir manualmente os testes de serviço da web) e seu comando Newman baseado em Node.js. companheiro de linha (que permite automatizar testes contra "coleções" de testes do Postman.) Gratuito e aberto!
fonte
Isso funcionou bem para mim, usando adicionalmente a autenticação BASIC:
Obviamente, você nunca deve usar autenticação BASIC sem SSL e um certificado verificado.
Encontrei isso novamente hoje, usando o cURL 7.49.1 do Cygwin para Windows ... E ao usar
--data
ou--data-binary
com um argumento JSON, o cURL ficou confuso e interpretaria o{}
no JSON como um modelo de URL. Adicionando um-g
argumento para desativar o cURL globbing corrigiu isso.Consulte também Passando um URL com colchetes para enrolar .
fonte
Você também pode colocar seu conteúdo JSON em um arquivo e passá-lo para curl usando a
--file-upload
opção via entrada padrão, desta forma:fonte
Isso funcionou para mim:
fonte
Estou usando o formato abaixo para testar com um servidor web.
Vamos assumir este formato de ditado JSON:
Exemplo completo
fonte
Use a opção -d para adicionar carga útil
Além do que, além do mais:
use -X POST para usar o método POST
use -H 'Accept: application / json' para adicionar um cabeçalho de tipo de aceitação
use -H 'Content-Type: application / json' para adicionar cabeçalho do tipo de conteúdo
fonte
Por favor, verifique esta ferramenta . Ajuda você a criar facilmente snippets de ondulação.
fonte
Isso funcionou para mim no Windows10
fonte
Aqui está outra maneira de fazer isso, se você tiver dados dinâmicos a serem incluídos.
fonte
Sei que muito foi respondido a essa pergunta, mas queria compartilhar onde eu tinha o problema de:
Veja, fiz tudo certo. Apenas uma coisa - "@" perdi antes do caminho do arquivo JSON.
Encontrei um documento relevante na internet - https://gist.github.com/subfuzion/08c5d85437d5d4f00e58
Espero que ajude poucos. obrigado
fonte
Se você configurar o SWAGGER para o aplicativo de inicialização do Spring e chamar qualquer API do seu aplicativo, poderá ver a solicitação CURL também.
Eu acho que essa é a maneira mais fácil de gerar solicitações através do CURL.
fonte
Você pode passar a extensão do formato desejado como o final do URL. como http: // localhost: 8080 / xx / xxx / xxxx .json
ou
http: // localhost: 8080 / xx / xxx / xxxx .xml
Nota: você precisa adicionar as dependências jackson e jaxb maven em seu pom.
fonte