我收到此错误:

com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token↵ at [Source: N/A; line: -1, column: -1] (through reference chain: com.test.web.TestFM["fields"])


我模拟了我的情况的简化版本,并抛出了相同的错误:

云端点:

@Api(name = "testApi", version = "v1", clientIds={Constants.WEB_CLIENT_ID, com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID})
public class TestEndpoint {
    public void Test(TestFM test){
        // nothing necessary here to recreate
    }
}


TestFM:

public class TestFM {
    public int id;
    public List<SubTestFM> fields;
}


SubTestFM:

public class SubTestFM {
    public String property1;
    public String property2;
}


Javascript:

gapi.client.testApi.testEndpoint.test({
    id:7,
    fields:[
        { property1: 'test', property2: 'test2' },
        { property1: 'test3', property2: 'test4' }
    ]
}).execute(function(resp){console.log(resp);});


我一直以为这可能是端点的限制,直到我意识到通过API资源管理器提交相同的数据时,一切都会按预期运行。

API资源管理器成功生成的请求:

POST http://localhost:8888/_ah/api/testApi/v1/Test

Content-Type:  application/json
X-JavaScript-User-Agent:  Google APIs Explorer

{
 "id": 7,
 "fields": [
  {
   "property1": "test",
   "property2": "test2"
  },
  {
   "property1": "test3",
   "property2": "test4"
  }
 ]
}


任何帮助是极大的赞赏!

最佳答案

读完我的问题后,我意识到Google Cloud Endpoints所涉及的一个库保留或以其他方式使用了字段名“ fields”。

从“字段”更改名称(在上面的TestFM中)已解决了上面的测试代码和我自己的代码中的错误。

关于java - 当在列表中映射POJO时,为什么Cloud Endpoints抛出com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26196562/

10-10 18:21