Rest 如何发送内容类型为“application/x-www-form-urlencoded”的POST请求
我正在尝试从我的TornadFX应用程序向我的nodejs服务器发送POST请求 这就是我向服务器发送请求的方式:Rest 如何发送内容类型为“application/x-www-form-urlencoded”的POST请求,rest,post,tornadofx,Rest,Post,Tornadofx,我正在尝试从我的TornadFX应用程序向我的nodejs服务器发送POST请求 这就是我向服务器发送请求的方式: val api: Rest by inject() api.baseURI = "http://localhost:5000/" api.post("api/register", userModel) { it.addHeader("Content-Type", "application/x-www-form-urlencoded") } 我的用户模型如下所示:
val api: Rest by inject()
api.baseURI = "http://localhost:5000/"
api.post("api/register", userModel) {
it.addHeader("Content-Type", "application/x-www-form-urlencoded")
}
我的用户模型如下所示:
class UserModel : JsonModel {
val nameProperty = SimpleStringProperty("")
var name by nameProperty
val emailProperty = SimpleStringProperty("")
var email by emailProperty
override fun toJSON(json: JsonBuilder) {
with(json) {
add("name", name)
add("email", email)
}
}
}
在我的节点服务器上打印请求正文时,我会得到以下结果:
[Object: null prototype] {
'{"name":"Test","email":"test@test.org"}': ''
}
当我通过邮递员发送请求时,我会收到以下正文:
[Object: null prototype] {
name: 'Test',
email: 'test@test.org'
}
这就是我试图用TornadoFX制作的东西,但没有成功。
我非常感谢你的帮助!
您正确地设置了Content-Type头,但您将JsonModel作为数据推送,因此框架将通过调用toJSON将其转换为JSON结构。application/x-www-form-urlencoded内容类型需要URL编码的数据段,因此需要将数据转换为URL编码的字符串。我建议在域模型中添加如下函数:
fun toURLEncoded() =
"name=${name.urlEncoded}&email=${email.urlEncoded}".byteInputStream(StandardCharsets.UTF_8)
本例使用一个名为urlEncoded的扩展函数来避免混乱。您可以这样定义扩展函数,例如:
fun Any.urlEncoded(): String = URLEncoder.encode(toString(), "UTF-8")
现在您只需调用api.postapi/register、userModel.tourencoded,就可以了。谢谢您的回答。我已将TornadoFX从1.7.17版更新为1.7.19版,现在它可以在不编码值的情况下工作。