Я создаю веб-приложение с java / spring на бэкэнде и угловым 2+ на фронтэнде. Я только что обнаружил что-то очень очень странное. У меня есть объект с именем AffiliateLinkDTO
, который отправляется из Java-приложения в угловое приложение. При получении JSON сериализуется в AffiliateLinkDTO
на стороне интерфейса. Оба класса должны быть точным зеркальным отражением друг друга. Чтобы быть здесь, приведены коды обоих классов.
AffiliateLinkDTO на стороне интерфейса:
export class AffiliateLinkDTO {
constructor(
public id?:number,
public affiliateLinkUrl?: string,
public localizedStoreFront?: string,
public sellerShipsAbroad?:boolean){}
}
AffiliateLinkDTO на стороне сервера:
public class AffiliateLinkDTO {
private Long id;
private String affiliateLinkUrl;
private LocalizedStorefront localizedStorefront;
private boolean sellerShipsAbroad;
}
Как вы можете видеть, оба являются точным изображением друг друга, за исключением незначительных деталей, F localizedStorefront на бэкэнде не пишется с большой буквы, как его аналог на внешнем интерфейсе. Как ни странно, это не приводит к ошибке на передней панели, но становится еще более странным.
Когда во внешнем интерфейсе я распечатываю поле affiliateLinkDTO.localizedStoreFront
экземпляра AffiliateLinkDTO
, оно печатает undefined
, но когда я печатаю affiliateLinkDTO.localizedStorefront
(с небольшим f), оно печатает значение! Как это возможно, когда поле localizedStorefront не существует в AffiliateLinkDTO на веб-интерфейсе ??? Хотя класс AffiliateLinkDTO используется для создания экземпляра объекта, имя поля чудесным образом меняется на localizedStorefront
. Кто-нибудь может дать мне объяснение, пожалуйста? Я действительно озадачен этим. Спасибо.
PS: JSON не анализируется в AffiliateLinkDTO вручную, я использую HttpClient для выполнения запроса get к бэкэнду, а JSON автоматически анализируется в AffiliateLinkDTO
РЕДАКТИРОВАТЬ: То, что я увидел, было вызвано ошибкой в visual studio, я перепроверил, чтобы посмотреть, смогу ли я воспроизвести то, что видел вчера, но не смог на этот раз, я получил ошибку компилятора.