gpt4 book ai didi

java - 在 Controller 中处理删除请求的正确方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 09:26:34 25 4
gpt4 key购买 nike

尝试从 Thymeleaf 模板文件中发出删除 http 请求

来自模板:

 <tr th:each="ingredient : ${listIngredients}">
<td th:text="${ingredient.id}">IngredientID</td>
<td th:text="${ingredient.name}">Name</td>
<td th:text="${ingredient.description}">Description</td>
<!-- <td th:text="${ingredient.img}">Img</td>
<td th:text="${ingredient.ingredients}">Ingredients</td>
<td th:text="${ingredient.preparation}">Preparation</td> -->
<td>
<!-- <a th:href="@{'/edit/' + ${ingredient.id}}">Edit</a>
&nbsp;&nbsp;&nbsp; -->
<form th:object="${ingredient}" th:action="@{'/ingredients/' + ${ingredient.id}}" th:method="delete">
<button type="submit">Delete</button>
</form>
</td>
</tr>

从我的 Controller :

@DeleteMapping("/ingredients/{ingredientId}")
public String deleteIngredient(@PathVariable Long ingredientId, @ModelAttribute("ingredient") Ingredient ingredient){
ingredientRepository.delete(ingredient);
return "redirect:../../";
}

带有保存按钮的表单模板:

<form action="#" th:action="@{/ingredients/ingredient/new/save}" th:object="${ingredient}"
method="post">

<table border="0" cellpadding="10">
<tr>
<td>Ingredient Name:</td>
<td><input type="text" th:field="*{name}" /></td>
</tr>
<tr>
<td>Description:</td>
<td><input type="text" th:field="*{description}" /></td>
</tr>

<!-- <tr>
<td>Tags:</td>
<td><input type ="text" th:field="*{tags}" /></td>
</tr> -->

<tr>
<td colspan="2"><button type="submit">Save</button> </td>

在 Controller 中保存方法:


@RequestMapping(value = "/ingredient/new/save", method = RequestMethod.POST)
public String saveIngredient(@ModelAttribute("ingredient") Ingredient ingredient){
ingredientRepository.save(ingredient);
return "redirect:../../";
}

成分实体:

package com.donovanuy.mixmix.entities;

import java.util.*;

import javax.persistence.*;

@Entity
@Table(name = "ingredients_master")
public class Ingredient extends AuditModel{

@Column(name = "ingredient")
private String name;
@Column(name="description")
private String description;

@Id
@GeneratedValue
private long id;

// public Ingredient(String n, String d){
// this.setName(n);
// this.setDescription(d);
// }

// public Ingredient(int id, String n, String d){
// this.setId(id);
// this.setName(n);
// this.setDescription(d);
// }


@ManyToMany(mappedBy = "ingredients")
Set<UserRecipe> recipes;

@ManyToMany
Set<Tag> tags;


// Setters
}

更新

现在一切都按预期进行,我将 DELETE 请求隐藏在模板文件中,并在我的存储库中创建了一个 deleteById 方法。

表格

<form th:action="@{'/ingredients/ingredient/' + ${ingredient.id}}" th:method="POST">
<input type="hidden" name ="_method" value="DELETE" />
<button type="submit">Delete</button>
</form>

Controller :

@DeleteMapping("/ingredients/ingredient/{ingredientId}")
public String deleteIngredient(@PathVariable Long ingredientId){
ingredientRepository.deleteById(ingredientId);
return "redirect:../";
}

存储库:

import org.springframework.data.jpa.repository.JpaRepository;


import com.donovanuy.mixmix.entities.Ingredient;
import java.util.List;


public interface IngredientRepository extends JpaRepository<Ingredient, Long> {
List<Ingredient> findAllById(Long id);

public void deleteById(Long Id);
}

最佳答案

这里的主要问题是,只有 GETPOST 方法在 HTML 表单提交 ( details ) 中有效。您可以利用 Spring 的 HiddenHttpMethodFilter 来解决这个问题。 。完成后,您可以使用标记:

<form th:action="@{'/ingredients/' + ${ingredient.id}}" method="POST">
<input type="hidden" name="_method" value="DELETE" />
<button type="submit">Delete</button>
</form>

对于 Controller 部分,在存储库中添加一个 deleteById(...) 方法。那么 Controller 代码可以是:

@DeleteMapping("/ingredients/{ingredientId}")
public String deleteIngredient(@PathVariable Long ingredientId) {
ingredientRepository.deleteById(ingredientId);
return "redirect:../../";
}

关于java - 在 Controller 中处理删除请求的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57629800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com