Отправляю POST-запрос с углового на весенний. Его десериализация в основном выполняется правильно, но один вложенный объект десериализуется как пустой объект.
Мои интерфейсы Angular выглядят следующим образом:
// ClientMedicalModal.ts
export interface ClientMedicalModal {
clientMedicalId: number;
client: ClientModel;
medicalEvidence: MedicalEvidence;
}
// ClientModal.ts
export interface ClientModal {
clientId: number;
}
// MedicalEvidenceModal.ts
export interface MedicalEvidenceModal {
B001: string;
B003: string;
B004: string;
}
Мои Java-объекты выглядят так:
public class ClientMedical implements Serializable {
private Integer clientMedicalId;
private Client client;
private MedicalEvidence medicalEvidence;
// getter and setter
}
public class Client implements Serializable {
private Integer clientId;
// getter and setter
}
public class MedicalEvidence implements Serializable {
private String B001;
private String B003;
private String B004;
public String getB001() {
return B001;
}
public MedicalEvidence setB001(String b001) {
B001 = b001;
}
// all other getter and setter
}
Когда я проверяю сообщение в своем браузере, все в порядке:
{"medicalEvidence":{"B001":"Test","B003":"TestMessage","B004":"Whatever"},"client":{"clientId":1}}
Отладка в Spring Я получаю запрос, есть Client-Object с clientId = 1, но ClientEvidence-Object пуст, все поля B00 * равны нулю. См. Здесь значения отладки
Привязка формы Spring связывает параметры формы с соответствующими полями для класса Client, но MedicalEvidence пусто, поэтому Spring создает экземпляр нового класса MedicalEvidence со всеми полями, имеющими нулевые значения. Почему параметры привязываются не к полям класса MedicalEvidence, а к классу клиента (и ко всем другим классам, которые я использую таким же образом)? Кстати. Это тоже не сработает, если я просто отправлю MedicalEvidence из Angular. Параметры объекта по-прежнему пусты.




Попробуйте использовать b001, b002, .. в качестве имен, первая буква не должна быть прописной в вашем варианте использования, за исключением того, что вы хотите использовать некоторую аннотацию. И используйте «это». в методе установки.
public class MedicalEvidence implements Serializable {
private String b001;
private String b003;
private String b004;
^^^^
public String getB001() {
return b001;
}
public MedicalEvidence setB001(String b001) {
this.b001 = b001;
^^^^^
}
Это сработало отлично, почему?