json - 在 Swift 中解析的 JSON HTTP 请求有效负载被 Express 解释为 JSON 对象中的单个键——为什么?
问题描述
我正在使用 Swift 在 iOS 应用程序中处理一些网络代码,并且遇到一个问题,即Codable
结构被不正确地解析为 JSON,这样整个对象都被用作键
我的Codable
名为 UserForLogin 的结构被解析为登录请求的正文。该结构具有以下代码:
struct UserForLogin: Encodable, Equatable {
let email: String
let password: String
init(email: String, password: String) {
self.email = email
self.password = password
}
}
signIn
看起来像这样:
func signIn(with data: UserForLogin) -> AnyPublisher<UserLoginDTO?, Error> {
return gcNetworkService.post(to: AuthModuleEndpoint.signin, data: data, with: [])
.tryMap { userWithToken -> UserLoginDTO in
return userWithToken
}.mapError { error in
return error
}.eraseToAnyPublisher()
}
并且该.post
方法本质上调用了另一个send
包含以下代码片段的方法:
var request = createURLRequest(for: requestURL)
request.httpMethod = method
let requestData = try? JSONEncoder().encode(data)
request.httpBody = requestData
return session.dataTaskPublisher(for: request)
但是,当我进行此调用时,我的后端收到的请求正文是:
{ '{"email":"test","password":"test2"}': '' }
本质上,整个对象被解析为一个 JSON 键,而不是像它应该的那样将每个变量作为键,将值作为值等。
对于上下文,当通过 Postman 发送请求时,我在后端成功处理了请求,所以我认为这不是服务器端问题。
任何指导将不胜感激!
解决方案
感谢 Jacob 指出我错过了这一行:
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
这解决了问题。
推荐阅读
- node.js - npm 在我添加 --local 前缀并在没有 -g 标志的情况下全局安装之前不会在本地安装,为什么?
- javascript - 如何使用 geoPath 居中和缩放
- sql - 每小时选择最新员工条目的 Oracle SQL 查询
- javascript - 我是否正确理解了这个 Javascript 函数?
- javascript - 我在 Formik 中使用 axios 发布请求,并返回 400 错误
- google-chrome - 我想限制在 chromium 中加载的页面
- wordpress - 如何在 Wordpress 画廊中放置图像
- vb.net - 如何在 Visual Basic 中将 Json 字符串转换为 Json 数组
- javascript - 如何为 HTML 元素的 css 类之一设置超时?
- shopify - 使用新的 fileDelete 从管理页面删除文件时出现“无效 ID”