У меня в фоновом режиме работает приложение с пружинной загрузкой и веб-интерфейс Angular. Выполнение запросов GET к серверу корректно возвращает вложенные объекты, которые я могу просмотреть и отобразить на веб-странице. Однако при выполнении запроса POST с использованием формы сервер всегда идентифицирует вложенный объект как нулевой, хотя я передаю тот же вложенный объект без каких-либо изменений.
Java (пример кода): оба класса имеют простойРепозитории JPA
ObjectA.java
@Entity
public class ObjectA {
@ApiModelProperty(hidden=true)
@Id
@GeneratedValue
private Long id;
private String description;
private ObjectB objectB;
}
ObjectB.java
@Entity
public class ObjectB {
@ApiModelProperty(hidden=true)
@Id
@GeneratedValue
private Long id;
private String description;
}
Angular (Пример кода):
ObjectA.ts:
import {ObjectB} from './ObjectB';
export class ObjectA {
constructor(
public description: string,
public objectB: ObjectB
){}
}
ObjectB.ts:
export class ObjectB {
constructor(
public description: string,
){}
}
ObjectA.service.ts:
const headers = new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Basic ' + btoa('foobar:password')});
...
public save(objA: ObjectA) {
return this.http.post(this.url, objA, {headers});
}
JSON, который передается от клиента к серверу:
{
"description": "A",
"objectB": {
"description": "B"
"_links": {
"self": {
"href": "http://localhost:8080/objectBs/1"
}
}
}
}
У меня есть пользовательская проверка на бэкэнде, которая проверяет входящий объект перед сохранением любых изменений в базе данных. Проверка идентифицирует вложенный объект как нулевой и возвращает клиенту код состояния HTTP 400 вместе с пользовательским сообщением об ошибке проверки «Требуется объект B».