在Google App Engine端点中自定义JSON实体解析

时间:2014-03-05 16:19:17

标签: java json google-app-engine

我必须手动将非常奇特的JSON有效负载转换为POJO。我以为我可以把JSON字符串放到String实体中:

@ApiMethod(
  name = "postSomething",
  path = "postSomething/{id}",
  httpMethod = ApiMethod.HttpMethod.POST
)
public void postSomething(@Named("id") Integer id, HttpServletRequest request, String data) {
  //Parse data here...
}

当我这样做时,我收到一个错误: MissingParameterNameException:缺少参数名称。参数类型(类java.lang.String)不是实体类型,因此应使用@Named注释。

我尝试使用@ApiTransformer,但我收到了类似的错误。

您能否举一个手动解析JSON内容的例子?

3 个答案:

答案 0 :(得分:1)

错误消息表明String数据需要有一个@Named注释,类似于Integer id。

答案 1 :(得分:1)

我通过使用Collection类代替String和手动解析来解决此问题:

@ApiMethod(
  name = "postSomething",
  path = "postSomething/{id}",
  httpMethod = ApiMethod.HttpMethod.POST
)

public void postSomething(@Named("id") Integer id, HttpServletRequest request, HashMap<String,String> data) {
  //Parse each item of data here...
}

由此,我可以解析data内的每个项目。这些值包含其他集合的层次结构(数组为List,JSON实体为Map)或实际值为String。因此,通过这样做,我不需要使用任何其他JSON解析库,例如Jackson。

答案 2 :(得分:0)

String不是@Entity对象,因此无法在没有正确注释(如@Name或@Nullable)的情况下将其作为参数(数据参数)传递给端点API。您必须将其从方法声明中删除,或使用@Name或@Nullable注释它。