0

HTTParty/Put 経由で Java/RestEasy サーバーに送信する必要がある Ruby のモデルがいくつかあります。

configuration_mapping.rb:

def as_json(options = {})
  {:configGroup => @group, :coordinates => {@key => @value}}
end

def self.put(endpoint, content, tier = 'nursery')
  response = HTTParty.put(base_uri + endpoint, json_payload(content))
end    

def self.json_payload(content)
  {
    :body => content.to_json,
    :format => :json,
    :headers => {"Content-Type" => "application/json", "content-type" => "application/json", "Accept" => "application/json"}
  }
end

JSON は二重にエスケープされます。

{ :body=>" { \"configGroup\":\"test\", \"coordinates\":{ \"統合テスト キー\":\"moo\" } } ", :format=>:json, :headers=>{" Content-Type"=>"application/json", "content-type"
=>"application/json", "Accept" =>"application/json" } }

そして、Jackson JSONパーサーは失敗します:

2011-11-27 15:34:11,179 エラー [tp-1442358158-0] [レポート] [] [asy.core.SynchronousDispatcher] PUT /v1/groups/test/mappings の実行に失敗しました;tester=統合テスト;tier=qa ;timeStamp=-4712-01-01 org.jboss.resteasy.spi.ReaderException: org.codehaus.jackson.map.JsonMappingException: START_OBJECT トークンから java.lang.String のインスタンスをデシリアライズできません [ソース: org.mortbay .jetty.HttpParser$Input@4092fef5; 行: 1、列: 22] で

httparty が文字をエスケープしたと考えて、独自の as_json メソッドを作成して、httparty を json に変換させようとしましたが、これは私が望んでいた json ではない出力であり、間違ったフィールドがここにあり、私の as_json メソッドは呼び出されません:

{:body=>Config::Client::ConfigurationMapping:0x00000100c78930 @dimensions={"tester"=>"統合テスト", "tier"=>"qa", "timeStamp"=>"-4712-01-01" }, @key="統合テストキー", @group="test", @value="moo">, :format=>:json, :headers=>{"Content-Type"=>"application/json" , "content-type"=>"application/json", "Accept"=>"application/json"}}

文字列が二重エスケープになる原因は何ですか?

4

1 に答える 1

0

問題がわかりました。json が正しくフォーマットされていませんでした。パケットを再フォーマットしたところ、機能しました。

于 2011-11-28T17:21:23.640 に答える