我必须手动将非常奇特的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内容的例子?
答案 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注释它。