gpt4 book ai didi

java - DELETE 和 PUT 方法总是调用 POST

转载 作者:行者123 更新时间:2023-12-01 16:16:48 26 4
gpt4 key购买 nike

我遇到了一个问题,但我不知道如何去思考它。

我有一个窗口,显示从 BD 加载的表中的 Activity 类型列表。我为每一行设置了几个操作按钮,包括删除和编辑。在我看来,问题是当我给出两个按钮中的任何一个时,它们总是调用 POST 方法。我有 PUT 和 DELETE,但它们不会经过那里,并且总是转到 POST。

我放置了 Controller 和 html 代码来查看是否有人看到了被忽略的内容。

Tipo_Actividad_ServicioController 类:

@Controller
public class Tipo_Actividad_ServicioController {

@Autowired
private Tipo_Actividad_ServicioService tipo_Actividad_ServicioServcie;

@RequestMapping(value = "/tipo_actividad_servicio", method = RequestMethod.GET)
public String findAll(Model model) {

extracted(model);

return "tipo_actividad_servicio";

}

// Guardar Tipo_Actividad_Servicio
@RequestMapping(value = "/tipo_actividad_servicio", method = RequestMethod.POST)
public String save(Tipo_Actividad_Servicio tipo_Actividad_Servicio, Model model) {

tipo_Actividad_ServicioServcie.save(tipo_Actividad_Servicio);

extracted(model);

return "tipo_actividad_servicio";

}

@RequestMapping(value = "/tipo_actividad_servicio", method = RequestMethod.PUT)
public String saveById(@RequestParam int id, Model model) {

Tipo_Actividad_Servicio tipo_Actividad_Servicio = tipo_Actividad_ServicioServcie.findById(id);

if(tipo_Actividad_Servicio.isActivo())
tipo_Actividad_Servicio.setActivo(false);
else
tipo_Actividad_Servicio.setActivo(true);

tipo_Actividad_ServicioServcie.save(tipo_Actividad_Servicio);

extracted(model);

return "tipo_actividad_servicio";

}

@RequestMapping(value = "/tipo_actividad_servicio", method = RequestMethod.DELETE)
public String deleteById(@RequestParam int id, Model model) {

tipo_Actividad_ServicioServcie.deleteById(id);

extracted(model);

return "tipo_actividad_servicio";

}

private void extracted(Model model) {

model.addAttribute("tipos_actividad_servicio", tipo_Actividad_ServicioServcie.findAll());
model.addAttribute("tipo_actividad_servicio", new Tipo_Actividad_Servicio());

}

}

以及调用删除方法的 HTML 表格。

<tbody>
<tr th:each="familia,iterStat : ${tipos_actividad_servicio}" th:class="${iterStat.odd}? 'odd'">
<td th:text="${familia.id}" style="display:false"></td>
<td th:text="${familia.nombre}"></td>
<td th:text="${familia.tipo}"></td>
<td th:text="${familia.observaciones}"></td>
<td style="display: flex; justify-items: center; align-items: center;">
<div class="btn-group">
<button type="button" class="text-white btn .btn-sm btn-warning" data-toggle="modal" data-target="#modal-lg">
Editar
</button>
<form style="margin: 0px;" th:action="@{/tipo_actividad_servicio}" th:method="put">
<input type="hidden" name="id" th:value="${familia.id}">
<button class="text-white btn .btn-sm btn-success" th:unless="${familia.activo}" type="submit">
Activar
</button>
<button class="text-white btn .btn-sm btn-secondary" th:if="${familia.activo}" type="submit">
Desactivar
</button>
</form>
<form style="margin: 0px;" th:action="@{/tipo_actividad_servicio}" th:method="delete">
<input type="hidden" name="id" th:value="${familia.id}">
<button class="text-white btn .btn-sm btn-danger" th:if="${familia.activo}" type="submit">
Eliminar
</button>
</form>
</div>
</td>
</tr>
</tbody>

这是控制台在调用该方法时向我显示的内容:

Hibernate: update tipo_actividad_servicio set activo=?, nombre=?, observaciones=?, tipo=? where id=?

当我从 Firefox 检查表单时,它告诉我该方法是 post 并且它将调用 PUT 或 DELETE ...

<form style="margin: 0px;" action="/tipo_actividad_servicio" method="post">
<input type="hidden" name="_method" value="put">
<input type="hidden" name="id" value="2">
<button class="text-white btn .btn-sm btn-secondary" type="submit">
Desactivar
</button>
</form>

事实是,我不再确切地知道该做什么、该尝试什么,如果有人能告诉我为什么它不能消除......

谢谢。

最佳答案

如果您使用的是 Boot 2.3.X,请确保您已启用隐藏的 http 方法过滤器 spring.mvc.hiddenmethod.filter.enabled=true。从 2.3.X 开始,此过滤器不再自动启用。该过滤器将查看 _method 属性并将请求定向到适当的 Controller 方法。

关于java - DELETE 和 PUT 方法总是调用 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62374626/

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