json请求主体通过ktor转义

y1aodyip  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(343)

我正在用一个简单的json主体创建一个post请求。当我创建一个json字符串时,如下所示:

Json.encodeToString(NewAlias(my_id= "j-mueller", alias_name= "finny"))

然后打印出来,看起来像这样:

{"my_id":"j-mueller","alias_name":"finny"}

然后,当我尝试使用ktor将其发布到端点时,如下所示:

val response = httpClient.post<String>("https://myurl/als/create") {
                        contentType(ContentType.Application.Json)
                        body = Json.encodeToString(NewAlias(my_id= "j-mueller", alias_name= "finny"))

                    }

在日志中,我看到ktor似乎逃避了内容,它看起来是这样的:

"{\"my_id\":\"j-mueller\",\"alias_name\":\"finny\"}"

我得到一个“400坏请求”作为回应。我对这种行为有影响吗?还是仅仅是ktor记录器添加了“”?当我尝试通过 Postman 发送的邮件,但正文中没有“/”时,它是有效的,所以我认为这就是问题所在。。。
有什么想法吗?
谢谢,詹斯

ndh0cuux

ndh0cuux1#

使用jsonfeature并让ktor序列化一个主体:

val client = HttpClient(CIO) {
    install(JsonFeature) {
        serializer = KotlinxSerializer()
    }
}

val response = client.post<String>("http://httpbin.org/post") {
    contentType(ContentType.Application.Json)
    body = NewAlias(my_id= "j-mueller", alias_name= "funny") // Do not serialize explicitly here
}

或显式序列化请求正文,但不使用jsonfeature:

val client = HttpClient(CIO)

val response = client.post<String>("http://httpbin.org/post") {
    contentType(ContentType.Application.Json)
    body = Json.encodeToString(NewAlias(my_id= "j-mueller", alias_name= "finny"))
}

相关问题