Merge pull request #10 from botandrose/get_json_with_no_request_body

application/json GETs can have no request body
This commit is contained in:
Serdar Dogruyol 2015-11-10 10:58:27 +02:00
commit da0d532447
2 changed files with 26 additions and 11 deletions

View file

@ -30,6 +30,7 @@ describe "ParamParser" do
params.should eq({"hasan" => "cemal", "name" => "serdar", "age" => "99"}) params.should eq({"hasan" => "cemal", "name" => "serdar", "age" => "99"})
end end
context "when content type is application/json" do
it "parses request body" do it "parses request body" do
route = Route.new "POST", "/" { } route = Route.new "POST", "/" { }
@ -44,6 +45,20 @@ describe "ParamParser" do
params.should eq({"name": "Serdar"}) params.should eq({"name": "Serdar"})
end end
it "handles no request body" do
route = Route.new "GET", "/" { }
request = HTTP::Request.new(
"GET",
"/",
headers: HTTP::Headers{"Content-Type": "application/json"},
)
params = Kemal::ParamParser.new(route, request).parse
params.should eq({} of String => AllParamTypes)
end
end
context "when content type is incorrect" do context "when content type is incorrect" do
it "does not parse request body" do it "does not parse request body" do
route = Route.new "POST", "/" do |env| route = Route.new "POST", "/" do |env|

View file

@ -38,7 +38,7 @@ class Kemal::ParamParser
end end
def parse_json def parse_json
return unless @request.headers["Content-Type"]? == APPLICATION_JSON return unless @request.body && @request.headers["Content-Type"]? == APPLICATION_JSON
body = @request.body as String body = @request.body as String
json = JSON.parse(body) as Hash json = JSON.parse(body) as Hash
json.each do |k, v| json.each do |k, v|