从Android发布到Rails时出现MultiJson::DecodeError

从Android发布到Rails时出现MultiJson::DecodeError,android,ruby-on-rails,ruby-on-rails-3,Android,Ruby On Rails,Ruby On Rails 3,我正在尝试将多部分JSON从Android发布到Rails 3.2 JSON API服务器 我正在建立一个像这样的城市: MultipartEntity mp = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); mp.addPart("DATA", new StringBody(jsonPostObject.toString())); @post = @current_user.posts.new(params[:DATA

我正在尝试将多部分JSON从Android发布到Rails 3.2 JSON API服务器

我正在建立一个像这样的城市:

MultipartEntity mp = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
mp.addPart("DATA", new StringBody(jsonPostObject.toString()));
 @post = @current_user.posts.new(params[:DATA][:post])
其中jsonPostObject是一个JSONObject,其中包含我要发布的数据, 如果我使用StringEntity而不是MultipartEntity,一切都正常,但我需要上传一个文件以及JSON哈希

rails代码如下所示:

MultipartEntity mp = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
mp.addPart("DATA", new StringBody(jsonPostObject.toString()));
 @post = @current_user.posts.new(params[:DATA][:post])
我得到以下错误:

[e0497f16bbc4bfacf4bdff43113f1d34] [127.0.0.1] 
MultiJson::DecodeError (756: unexpected token at '--1Cg_oM4E624kPv1bobRRbZvkyO_kAKN3E
Content-Disposition: form-data; name="DATA"

{"tags":["df"],"location_id":2,"post":{"content":"test #df"}}
--1Cg_oM4E624kPv1bobRRbZvkyO_kAKN3E--
'):
  json (1.6.6) lib/json/common.rb:148:in `parse'
  json (1.6.6) lib/json/common.rb:148:in `parse'
  multi_json (1.2.0) lib/multi_json/engines/json_common.rb:9:in `decode'
  multi_json (1.2.0) lib/multi_json.rb:81:in `decode'
  activesupport (3.2.3) lib/active_support/json/decoding.rb:12:in `decode'
  actionpack (3.2.3) lib/action_dispatch/middleware/params_parser.rb:47:in      `  parse_formatted_parameters'
  actionpack (3.2.3) lib/action_dispatch/middleware/params_parser.rb:17:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/flash.rb:242:in `call'
  rack (1.4.1) lib/rack/session/abstract/id.rb:205:in `context'
  rack (1.4.1) lib/rack/session/abstract/id.rb:200:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/cookies.rb:338:in `call'
  activerecord (3.2.3) lib/active_record/query_cache.rb:64:in `call'
  activerecord (3.2.3)    lib/active_record/connection_adapters/abstract/connection_pool.rb:467:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
  activesupport (3.2.3) lib/active_support/callbacks.rb:405:in  `_run__1468729498116700342__call__1422066066276649474__callbacks'
  activesupport (3.2.3) lib/active_support/callbacks.rb:405:in `__run_callback'
  activesupport (3.2.3) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
  activesupport (3.2.3) lib/active_support/callbacks.rb:81:in `run_callbacks'
  actionpack (3.2.3) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/reloader.rb:65:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
  railties (3.2.3) lib/rails/rack/logger.rb:26:in `call_app'
  railties (3.2.3) lib/rails/rack/logger.rb:14:in `block in call'
  activesupport (3.2.3) lib/active_support/tagged_logging.rb:25:in `tagged'
  railties (3.2.3) lib/rails/rack/logger.rb:14:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/request_id.rb:22:in `call'
  rack (1.4.1) lib/rack/methodoverride.rb:21:in `call'
  rack (1.4.1) lib/rack/runtime.rb:17:in `call'
  activesupport (3.2.3) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
  rack (1.4.1) lib/rack/lock.rb:15:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/static.rb:62:in `call'
  railties (3.2.3) lib/rails/engine.rb:479:in `call'
  railties (3.2.3) lib/rails/application.rb:220:in `call'
  rack (1.4.1) lib/rack/content_length.rb:14:in `call'
  railties (3.2.3) lib/rails/rack/log_tailer.rb:14:in `call'
  rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service'
  /home/gal/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
  /home/gal/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
  /home/gal/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'


[e0497f16bbc4bfacf4bdff43113f1d34] [127.0.0.1]   Rendered /home/gal/.rvm/gems/ruby-1.9.3-p0/gems/actionpack-3.2.3/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.2ms)
[e0497f16bbc4bfacf4bdff43113f1d34] [127.0.0.1]   Rendered /home/gal/.rvm/gems/ruby-1.9.3-p0/gems/actionpack-3.2.3/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.1ms)
[e0497f16bbc4bfacf4bdff43113f1d34] [127.0.0.1]   Rendered /home/gal/.rvm/gems/ruby-    1.9.3-p0/gems/actionpack-    3.2.3/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout     (10.0ms)
更新:

这是用“tcpflow”捕获的请求:

POST /api/posts.json HTTP/1.1
Content-Type: application/json
Accepts: application/json
X-API-KEY: 7d867d16a5e25337b6d7857965f812bee73b76ac
Content-Length: 203
Host: 10.0.2.2:3000
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)

--UcMcwIxqCnaZ5GiqW1GVqb9JnK7n3rjH
Content-Disposition: form-data; name="DATA"

{"tags":["test"],"location_id":2,"post":{"content":"test content\n\n#test tag"}}
--UcMcwIxqCnaZ5GiqW1GVqb9JnK7n3rjH--

是否可以删除该令牌,或者如何使用rails正确解码它?

您可以发布请求的外观(即服务器究竟接收到了哪些字节)?我尝试使用rails.logger.debug执行此操作,但由于某些原因,它在开发过程中没有输出任何内容。我更想使用tcpdump、fiddler等,能够准确捕获已发送内容的内容。我用请求更新了问题。我看到那个令牌了,我该怎么处理?你的内容类型不对。由于它不是多部分/表单数据rails,我认为rails没有将其解析为多部分表单,并且认为部分边界字符串(--UcM…)是数据的一部分