java - 405 - 请求 GET 和 POST
问题描述
您好,我的更新对象有问题,我不知道更新数据后我收到的消息:不支持请求方法“GET”。但是刷新对象后的日期是更新的。
使用 GET 和 POST 方法更新对象的控制器
@Controller
@RequestMapping("/packet")
public class PacketController {
@GetMapping("/modify/{id}")
public String modifyPacketGet(Model model, @PathVariable Long id)
{
model.addAttribute("channels", channelService.getAllChannels());
model.addAttribute("packet", packetService.getById(id));
return "packet/modify";
}
@PostMapping("/modify")
public String modifyPacketPost(Model model, @ModelAttribute PacketDto packetDto)
{
packetService.updatePacket(packetDto);
return "redirect:/packet/modify";
}
HTML 表单
<form th:action="@{/packet/modify}" method="post" th:object="${packet}" enctype="multipart/form-data">
<input type="text" hidden="hidden" readonly="readonly" th:field="*{id}" />
<input type="text" hidden="hidden" readonly="readonly" th:field="*{filename}" />
<div class="form-group">
<label for="name" class="h3 text-success">Name:</label>
<input id="name" type="text" th:field="*{name}" class="form-control">
</div>
<div class="form-group">
<label for="price" class="h3 text-success">Price:</label>
<input id="price" type="text" th:field="*{price}" class="form-control">
</div>
<div class="form-group">
<label for="description" class="h3 text-success">Description:</label>
<textarea class="form-control" rows="5" th:field="*{description}" id="description"></textarea>
</div>
<div class="form-group">
<label for="image" class="h3 text-success">Image:</label>
<input id="image" type="file" th:field="*{multipartFile}" accept="image/**" class="form-control">
</div>
<div class="form-group">
<label for="channel" class="h2 text-secondary">Channels:</label>
<ul class="list-inline">
<li class="list-inline-item" th:each="c : ${channels}">
<input id="channel" type="checkbox" th:field="*{channelIds}" th:value="${c.id}">
<label th:text="${c.name}"></label>
</li>
</ul>
</div>
<button type="submit" class="btn btn-success btn-lg mr-2">Add</button>
</form>
解决方案
您的控制器中未处理http 请求GET /packet/modify
,您将POST
方法重定向到该 http 请求:
return "redirect:/packet/modify";
要解决此问题,您需要执行以下操作之一:
将您的重定向请求更改
POST
为正在处理的端点:return "redirect:/packet/modify/" + packetDto.getPacketId();
或者,处理该
GET
端点:@GetMapping("/modify/") public String retrievePacket(...) { ... }
希望这可以帮助。
推荐阅读
- java - RecyclerView 没有 LayoutManager android.support.v7.widget.RecyclerView
- python - 如何使用 Python 制作直方图,就像使用 R hist 函数一样
- php - trim() 期望参数 1 是字符串,给定对象,Wordpress
- algorithm - 如何在数组中找到一个峰值?
- node.js - 标头崩溃应用程序,错误类型错误:未定义不是对象(评估“theme.label”)
- java - 如何使用 java + hibernate 将值插入 SQL Server 中的主键?
- html - 在小屏幕上对齐标题和段落左侧的图像,然后在它们之间对齐
- xamarin - 创建 xamarin 应用程序时找不到“使用 PCL 的跨平台”
- python-3.x - 为python创建一个常规语法“编译器”
- ios - 为 iOS 调试版本禁用 Firebase Analytics