Публикация вложенного объекта из Angular в Spring REST API всегда пуста - PullRequest
0 голосов
/ 14 октября 2019

У меня в фоновом режиме работает приложение с пружинной загрузкой и веб-интерфейс 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».

1 Ответ

0 голосов
/ 14 октября 2019

Я не могу оставлять комментарии, поэтому публикуйте как ответ.
Похоже, вы отправили неверный Content-Type http заголовок. Я полагаю, вы отправляете Content-type: application/json; charset=utf-8, но ваш сервер ожидает multipart/form-data.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...