Работа с iOS Alamofire с приложением Spring Boot.
Клиентское приложение
Модель
class User: Codable {
var name: String
var email: String
var token: String
var password: String
var loginStatus: Int
}
class UserResponseData: Codable {
let body: User?
}
Запрос вызова
private func makeRequest(_ path: String, method: HTTPMethod, params: Parameters?, headers: HTTPHeaders?, completion: @escaping(User?) -> Void) {
let enc = JSONEncoding.default
let url = AppConstants.ENDPOINT + path //path = signup
Alamofire.request(url, method: .post, parameters: params, encoding: enc, headers: headers)
.validate()
.responseJSON { response in
switch (response.result) {
case .success( _):
do {
// issue userData becomes nil but no parsing error
let userData = try JSONDecoder().decode(UserResponseData.self, from: response.data!)
} catch let error as NSError {
print("Failed to load: \(error.debugDescription)")
}
case .failure(let error):
print("Request error: \(error.localizedDescription)")
}
}
}
Серверное приложение
Модели
public class RestResponse {
private String status = "failed";
private String errorMessage = "Error";
private ResponseEntity<?> data = null;
public RestResponse() {}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
public ResponseEntity<?> getData() {
return data;
}
public void setData(ResponseEntity<?> data) {
this.data = data;
}
}
Контроллер
@RestController
@RequestMapping("/signup")
public class SignupController {
@Autowired
public UserDao userDao;
@PostMapping()
ResponseEntity<RestResponse> signup(@RequestBody User newUser) {
User user = userDao.addUser(newUser);
user.setPassword("******");
RestResponse response = new RestResponse();
response.setStatus("success");
response.setErrorMessage(null);
response.setData(ResponseEntity.ok().body(user));
return ResponseEntity.ok().body(response);
}
}
Я получаю нулевое значение для userData
в ответе Alamofire без какой-либо ошибки синтаксического анализа .
let userData = try JSONDecoder().decode(UserResponseData.self, from: response.data!)
Хотя я получаю действительный ответ от Почтальона,
{
"status": "success",
"errorMessage": null,
"data": {
"headers": {},
"body": {
"name": "Elon",
"email": "elon@s.c",
"password": "******",
"token": "Elon Token",
"loginStatus": 0
},
"statusCode": "OK",
"statusCodeValue": 200
}
}
Чего мне не хватает?