2015-06-29 43 views
2

我試圖從html頁面將兩個字符串值一起傳遞給服務器,但我收到此錯誤。JsonParseException:意外的字符

controller.js:

'use strict'; 

myApp.controller('fooController', 
function($scope,fooCollection) { 
    $scope.fooEntity = { 

    }; 
    $scope.createfooGroup = function() { 
     fooCollection.createfooGroup($scope.fooEntity , 
      $scope.string1, $scope.string2 
     ) 
    }; 
}); 

service.js:

myApp.factory('fooCollection', function($resource) { 
return $resource('../api/group', {}, { 
    createfooGroup : {method: 'POST'} 
}) 
}); 

和整個錯誤信息是:

Failed executing POST /group 
org.jboss.resteasy.spi.ReaderException: org.codehaus.jackson.JsonParseException: Unexpected character ('a' (code 97)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') 
at [Source: [email protected]; line: 1, column: 2] 
at org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBodyParameterInjector.java:183) 
at org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInjectorImpl.java:89) 
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:112) 
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:296) 
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:250) 
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:237) 
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356) 
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179) 
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220) 
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) 
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
at org.eclipse.jetty.server.Server.handle(Server.java:499) 
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) 
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) 
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
at java.lang.Thread.run(Thread.java:745) 

我加入了網頁上的NG-模型屬性。有人能幫我解決這個問題嗎?非常感謝!

回答

0

當您調用$resource實例的方法時,即使是自定義實例,它也會接受嚴格的參數列表。下面是從docs報價:

類對象或實例對象上的操作方法可被調用 使用以下參數:

  • HTTP GET「類」動作:Resource.action( [參數],[成功], [錯誤])
  • 非GET 「類」 動作:Resource.action([參數], POSTDATA,[成功],[錯誤])
  • 非GET實例行動: 實例。$動作([參數],[成功],[錯誤])

你的自定義方法createfooGroup被明確定義爲POST方法,所以被施加第二個選項(非GET「類「動作)。 Action期望第一個參數[parameters]將是可選的查詢字符串參數的列表,第二個爲POST方法需要,第三個爲成功回調,也是可選的。

所以,當你撥打電話

fooCollection.createfooGroup($scope.fooEntity, $scope.string1, $scope.string2); 

傳遞$scope.fooEntity[parameters]$scope.string1postData$scope.string2[success],這顯然會導致一些意外行爲。在這種情況下,您的服務器接收值爲$scope.string2作爲POST數據,我假設它只是一些字符串而不是有效的JSON,因此服務器無法解析它。如果你想把所有的值傳給服務器,把它們放在一個數組中,所以一個動作會將它解釋爲:postData

fooCollection.createfooGroup([$scope.fooEntity, $scope.string1, $scope.string2]);