2017-01-06 18 views
1

解析JSONのPOST本体

defmodule Router.Folder do 
    use Maru.Router 

    namespace :folder do 
    route_param :id do 
     get do 
     IO.puts "ID: " <> params[:id] 
     json(conn, %{ user: params[:id], msg: "Hello Elixir World!" }) 
     end 

     params do 
     requires :name, type: String 
     end 

     post do 
     IO.puts params[:name] 
     IO.puts params[:token] 
     IO.puts params[:id] 
     IO.puts "Posting" 
     json(conn, %{ msg: "Hello Elixir World!" }) 
     #conn |> text("Hello") 
     end 

    end # end route_param :id 
    end # end namespace :folder 
end # end defmodule Router.Folder 

defmodule FolderService.API do 
    use Maru.Router 

    before do 
    plug Plug.Logger 
    plug Plug.Parsers, 
     pass: ["*/*"], 
     json_decoder: Poison, 
     parsers: [:urlencoded, :json] 
    end 

    mount Router.Folder 
end 

が、私はこのエラーを取得するには、次のモジュールの定義を使用して

** (exit) an exception was raised:
** (Maru.Exceptions.InvalidFormat) Parsing Param Error: name
(folder) lib/folder.ex:29: anonymous fn/1 in FolderService.API.route/2
(maru) lib/maru/runtime.ex:25: Maru.Runtime.parse_params/3
(folder) lib/folder.ex:29: anonymous fn/1 in FolderService.API.route/2
(folder) lib/folder.ex:29: anonymous fn/1 in FolderService.API.error_handler/1
(folder) lib/folder.ex:29: anonymous fn/1 in FolderService.API.call/2
(folder) lib/folder.ex:29: anonymous fn/1 in FolderService.API.error_handler/1
(plug) lib/plug/adapters/cowboy/handler.ex:15: Plug.Adapters.Cowboy.Handler.upgrade/4
(cowboy) src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4

この curlコマンドを実行している:

curl -X POST -H "Content-Type: applicaton/json" -d '{"name": "foobar"}' 'http://localhost:9000/folder/1233' 

コードが正常に動作しますが、カールすると

curl -X POST -d "name=foobar" 'http://localhost:9000/folder/1233' 
+0

Typo 'applicaton' - >' application'? – Dogbert

+0

はい、それはタイプミスでした。しかし、カールの中で "アプリケーション"のスペルを修正した後でも。エラーは上に貼り付けられたエラーです。 – bpmason1

答えて

1

モジュールに関するすべてがよく見えます。問題は、上記のようにcurlでPOSTリクエストを送信しようとするときにcolonsを使用する必要があることです。=を使用しました。

これは動作するはずです:POSTデータを送信するためのcurl -X POST -d "name:foobar" 'http://localhost:9000/folder/1233'

例。

How to POST JSON data with Curl from Terminal/Commandline to Test Spring REST?