我正在与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")
问题解决了。