按以下方式获取Lambda响应,它是经过双重编码的。
“ {\” id \“:\” 6EE1DDABDC5C5EB271289A057DDA82B1 \“,\”名称\“:\”测试\“,\” stateName \“:\” INITIAL \“,\”说明\“:\”测试说明\“,\”类型\“:\”下载\“,\” createTime \“:\” 2018年8月10日2:02:02 PM \“,\” updateTime \“:\” 2018年8月10日2 :02:02 PM \“}”
但是当我在handleRequest(Object input,Context context)方法下打印它时,它显示的很好。
{“ id”:“ 6EE1DDABDC5C5EB271289A057DDA82B1”,“名称”:“ Test”,“ stateName”:“ INITIAL”, “ description”:“测试说明”,“ type”:“测试”,“ createTime”:“ 2018年8月10日2:02:02 PM”, “ updateTime”:“ 2018年8月10日下午2:02:02”}
有什么解决方法可以使它正确显示在响应中?
答案 0 :(得分:3)
您的lambda返回json,这实际上只是一个可以解码的有效json字符串。但是lambda响应也是json。因此,要在lambda响应对象中发送json,它会作为字符串包含在内。在我看来,将其称为“双重编码”是没有错的,并且正如名称所暗示的那样,您还必须解码两次:一次用于外部json,一次用于内部Json。
当您从lambda内部打印时,您的响应尚未编码为包含json的对象,这就是为什么它在此处未进行双重编码的原因。
答案 1 :(得分:1)
我最近通过更改我的 Lambda 函数以返回 Java 对象解决了这个问题 - 我创建了一个具有公共 get 方法的响应类,Lambda 运行时将其转换为 JSON。没有双重编码的 JSON。不知道为什么没有记录下来。