Я действительно не уверен .. Я не могу придумать работающую функцию PATCH на внешнем интерфейсе, и я открыт для любых предложений. Я пошел с этими параметрами и прочим, основываясь на методе post. Я не уверен, как мне построить две функции на внешнем интерфейсе ... (одна в сервисе, а другая в компоненте). Я даже не уверен, правильно ли сформирована форма (метка), так как как я использую это для метода сообщения.

ороне сервера показано, что вызывается метод PATCH, и в конце массива добавляется ноль вместо нового массива Item с именем и ценой, взятыми из пользовательского ввода.

Метод PATCH в сервисном компоненте:

      patchAdd(menu: MenuModel | number, itemToAdd: ItemClass): Observable<any> { 
        const id = typeof menu === 'number' ? menu: menu.id;
        const url = `${this.menusUrl}/add/${id}`;

        return this.http.patch(url, itemToAdd, httpOptions).pipe ()
}

Функция patchItAdd, которая реализует метод patchAdd и получает данные из html: Обратите внимание, что есть несколько комментариев от моих неудачных попыток.

 patchItAdd(name: string, price: number){
        name = name.trim();
        if (!name) {return;}
        const id = +this.route.snapshot.paramMap.get('id');
        this.menuService.patchAdd(id, this.item)
        //With this ^^ , the value is null, but new element is added to the array. Cannot read property push of undefined. PATCH is triggered on the backend.
        // this.menuService.patchAdd(id, {name, price} as ItemClass) ----- Three errors, nothing happens
        .subscribe(item => {
          this.items.push(item);
        });}

HTML-метка, которая должна собирать пользовательский ввод и передавать данные в функцию:

<label class="forma">
          Name of the item:
          <input #itemName placeholder="What's the name of the item?" onfocus="this.placeholder =''" onblur="this.placeholder = 'What\'s the name of the item?'"/><br><br>
          Item's price:
          <input #itemPrice placeholder="What's the price?"onfocus="this.placeholder =''" onblur="this.placeholder = 'What\'s the price?'"/><br><br>
          <span class="addnewbuttontext"><button class="addnewitembutton" (click) = "patchItAdd(itemName.value, itemPrice.value)">Add</button></span>
      </label><br>

Метод PATCH в бэкэнде (Dropwizard):

   @PATCH
   @Path("/add/{menuId}")
   public void addMenuItem(
            @PathParam("menuId") final int menuId,
            final Item item) {  
      final java.util.List<Item> items = this.menuRepository.get(menuId).getItems();
      items.add(item);
   }

Только нулевое значение добавляется в массив на сервере после нажатия кнопки «ДОБАВИТЬ» и вызова функции patchItAdd. Очевидно, что никакие данные не отображаются на интерфейсе ни из-за этого. Что я делаю не так, или, по крайней мере, как я должен подходить к методу PATCH на внешнем интерфейсе с Angular 7?

Ответы на вопрос(1)

Ваш ответ на вопрос