Poisonを使用してスラックAPIに送信するJSONのマップをエンコードしています。これは私を与えるもの毒である:私は、JSONの糸くずの中にあることを置くときスラック用にPoisonを使用してJSONにエンコードする
"{\"text\":\"changed readme fad996e98e04fd4a861840d92bdcbbcb1e1ec296\"}"
それが有効なJSONであると言いますが、スラックは「無効なペイロード」を応答します。
私はこの
{"text":"changed readme fad996e98e04fd4a861840d92bdcbbcb1e1ec296"}
に見えるようにJSONを変更した場合、それは動作します。誰が私がこれで間違っているのか知っていますか?エンコードされたJSONで余分な処理を行う必要がありますか、または設定する必要があるヘッダがありますか?ここで
は私のコントローラここ
def create(conn, opts) do
message = Message.create_struct(opts)
response = Slack.Messages.send(message)
case response do
{:ok, data} ->
render conn, json: Poison.encode!(data)
{:error, reason} ->
render conn, json: reason
end
end
はJSONを作成する部分である
defmodule Slack do
use HTTPoison.Base
@endpoint "http://url.com"
def process_url() do
@endpoint
end
def process_response_body(body) do
body
|> Poison.decode! # Turns JSON into map
end
def process_request_body(body) do
body
|> Poison.encode! # Turns map into JSON
end
end
を処理するメッセージ
defmodule Slack.Messages do
def format_simple_message(map) do
text = map.description <> " " <> map.commits
message = %{text: text}
end
def post_to_slack(map) do
Slack.post(:empty, map)
end
def send(map) do
map
|> format_simple_message
|> post_to_slack
end
end
そして、私のHTTPoisonを送信するためのライブラリの一部であります最後のブロックで
関連するコントローラ機能のソースを投稿することはできますか?おそらく 'json(conn、data)'の代わりに 'json(conn、Poison.encode!(data))'を呼び出すでしょう。 – Dogbert
私がやっていることをよりよく理解するためのコードをいくつか追加しました。 – humdinger
"これはPoisonが私に与えるものです:..."コードのどこからこの値を得ましたか? – Dogbert