我已经能够将所有内容类型设置为before
块中的JSON,但是在过滤器后面有一个sinatra允许我在所有响应上运行to_json(而不是写{ {1}}我的例子中有3次)?
to_json
谢谢!
答案 0 :(得分:8)
您可以在after
块中执行此操作:
before do
content_type :json
end
get '/' do
{ a: 1 }
end
after do
response.body = JSON.dump(response.body)
end
Sinatra将重新计算更新的正文值的正确内容长度。
另一种方法是使用助手:
helper do
def j(data)
JSON.dump(data)
end
end
get '/' do
j({ a: 1 })
end
Sinatra::JSON
项目做同样的事情。此外,您可能希望查看专为构建API Grape或Goliath而设计的库。这两个库提供了一种简单的方法来连接解码器和编码器来处理这种类型的自动转换。
答案 1 :(得分:0)
输入 set :default_content_type, 'application/json'
,您的所有回复都将包含一个 Content-Type: application/json
标头。