Я занимаюсь разработкой приложения для социальной сети, состоящего из API на основе Rails и веб-приложения Angular7.По сути, приложение Angular представляет собой веб-интерфейс к API.
Я использую библиотеку Typescript сериализации для сопоставления возврата API rails моим моделям Angular, цель состоит в том, чтобы отобразить ответ json из snake_case вcamelCase.
По сути, я могу десериализовать один объект, но не могу десериализовать массив объектов.
Конкретно в моем случае я пытаюсь войти в приложение, а затем сделать запрос на получение всех зарегистрированных дружеских отношений пользователя, из-за этого я смоделировал класс с именем CurrentUser, который соответствует имени входаresponse и Friendship, которые соответствуют ответу Friendship.
Вот один из ответов API и то, как я отображаю его на одну из моих моделей с библиотекой, в частности, эта модель отображает ответ процесса входа в систему:
Ответ:
loginResponse: {
created_at: "2019-05-25T09:18:55.708-03:00"
email: "diego@gmail.com"
enabled: true
expire_at: "2019-05-29T14:45:51.000-03:00"
id: 2
login: "Diego"
name: "Diego"
profile_id: 2
token: "65zWGEea6M9DCn2PsL-z"
user_image: {
enabled: true
id: 2
public_image_path: "http://localhost:3000/images/users`
}
}
Класс режима TS:
export class CurrentUser {
// * ============================================
// * Attributes
// * ============================================
@autoserialize id: number;
@autoserialize name: string;
@autoserialize email: string;
@autoserialize login: string;
@autoserialize enabled: boolean;
@autoserializeAs('profile_id') profileId: number;
@autoserializeAs('created_at') createdAt: Date;
@autoserialize token: string;
@autoserializeAs('expire_at') expireAt: Date;
@deserializeAs(UserImage, 'user_image') userImage: UserImage;
// * ============================================
// * Methodds
// * ============================================
constructor() { }
}
Класс обслуживания TS, который выполняет запрос:
export class LoginService {
// * ============================================
// * Attributes
// * ============================================
private resourceLogin =
'http://localhost:3000/api/v1/logins';
private resourceAuthToken =
'http://localhost:3000/api/v1/core_module/permission_module/authtokens';
// * ============================================
// * Methodds
// * ============================================
constructor(
private http: HttpClient,
private router: Router,
private friendshipService: FriendshipService
) {}
**THIS IS THE METHOD THAT PERFORMS THE REQUEST**
public doLogin(login: Login): Observable<CurrentUser> {
let httpParams = new HttpParams();
httpParams = httpParams.set('login[email]', login.email.toString());
httpParams = httpParams.set('login[password]', login.password.toString());
return this.http
.post<Login>(this.resourceLogin, httpParams)
.pipe(map((data) => Deserialize(data, CurrentUser)));
}
}
ThisПроцесс работы отлично, он преобразует все аннотированные свойства.Проблема возникает, когда я пытаюсь отобразить ответ метода, который запрашивает все зарегистрированные дружеские отношения с пользователем, я попробовал 2 способа написания кода.
Вот метод, который выполняет запрос дружбы к API:
// FIRST VERSION
public findUserFriendships(currentUser: CurrentUser): Observable<Friendship[]> {
let httpParams = new HttpParams();
httpParams = httpParams.set('user_friendships', 'true');
httpParams = httpParams.set('user_id', currentUser.id.toString());
return this.http
.get<Friendship[]>(this.resourceFriendship, {params: httpParams})
.pipe(map((data) => Deserialize(data, Friendship)));
}
// SECOND VERSION
public findUserFriendships(currentUser: CurrentUser): Observable<Friendship[]> {
let httpParams = new HttpParams();
httpParams = httpParams.set('user_friendships', 'true');
httpParams = httpParams.set('user_id', currentUser.id.toString());
return this.http
.get<Friendship[]>(this.resourceFriendship, {params: httpParams})
.pipe(map((data) => data.map((item) => Deserialize(item, Friendship))));
}
Я отлаживаю приложение с помощью термина отладчик, поэтому я в основном пишу отладчик в своем коде, и когда код достигает этой точки, приложение останавливается.
Через эту отладкуя смог выяснить, что когда я использую первую версию метода findUserFriendships, я получаю пустой объект Friendship, а когда я пользуюсь второй версией findUserFriendships, я ничего не получаю, я даже не останавливаюсь на отладчике;
В любом случае конечной целью является сопоставление всех объектов Дружбы в массиве Дружбы.
Заранее спасибо.