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



我必须手动将非常特殊的JSON有效载荷转换为Pojos。我以为我可以将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...
}

当我这样做时,我会收到一个错误:丢失ParameterNameException:丢失参数名称。参数类型(类Java.lang.string)不是实体类型,因此应用@Named注释。

我尝试使用 @ApiTransformer,但我有类似的错误。

您能给我一个手动解析JSON内容的示例吗?

错误消息说字符串数据需要具有@Named注释,类似于整数ID。

我通过使用Collection S类而不是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。

字符串不是@entity对象,因此如果没有正确的注释,就无法将其作为参数(数据参数)传递到端点API(例如@name或@nullable)。您必须从方法声明中删除它,或者用@name或@nullable进行注释。

最新更新