我的应用程序在Http响应中收到一个json
{"result":"success","additional-info":"{\"external-profile\":{\"email\":\"test@test.com\",\"firstname\":\"ln\",\"lastname\":\"fn\",\"password\":\"somePassword\"}}"}
我写了reads
可以将传入消息转换为case class
implicit val externalProfileAPIReads:Reads[ExternalUserProfileAPI] = (
(JsPath \ "external-profile").read[ExternalUserProfile]
).map((x:ExternalUserProfile)=>(ExternalUserProfileAPI.apply(x)))
但是在我的单元测试中,当我尝试转换消息时,转换失败。
val message = (responseBody \ "additional-info").get.as[ExternalUserProfileAPI]
错误是
JsResultException(errors:List((/external-profile,List(JsonValidationError(List(error.path.missing),WrappedArray())))))
play.api.libs.json.JsResultException: JsResultException(errors:List((/external-profile,List(JsonValidationError(List(error.path.missing),WrappedArray())))))
at play.api.libs.json.JsReadable.$anonfun$as$2(JsReadable.scala:25)
问题1-转换是否因为接收到的消息中的json
字段中包含\
而失败?
问题2-在“测试方法”中,我没有在响应中明确添加\
。发送响应时,我只是在toString()
上呼叫case class
。 Json.toJson(externalProfileAPI).toString()
。如果问题是\
,我怎么不将其发送到已发送的响应中,或者在客户端将其转义?
答案 0 :(得分:1)
问题1:转换是否失败,因为 收到的邮件中包含
\
?
是的,因为当前状态下的字符串不是正确的Json,所以必须删除(转义)那些反斜杠。
问题2:如果是
\
,我怎么不将其发送到 发送响应还是在客户端将其转义?
您是否偶然在发送端的json上致电了JSON.stringify()
?如果是这样,将其删除将删除反斜杠。否则,您可以调用JSON.parse(YOUR_STRING)
来逃避接收端的反斜杠。