我有一个包含一些项目的数据库。我想创建一个表单,用于编辑带有某些ID的项目。我做到了,表格打开正常。地址是/ itemproject / edit_item / {id}当我尝试激活POST方法时,问题开始了。程序不是将我引导到带有项目列表(/ itemproject / view_items)的页面,而是将我发送到/ itemproject / edit_item / edit_item。 itemproject是上下文路径(例如)。
@RequestMapping(value = "/edit_item/{id}", method = RequestMethod.GET)
public String editItem(@PathVariable("id") Integer id, Model model) {
Item item;
item = dbService.findItem(item).get(0);
model.addAttribute("item", item);
return "edit_item";
}
@RequestMapping(value = "/edit_item/{id}", method = RequestMethod.POST)
public String editItemComplete(@PathVariable("id") Integer id, @ModelAttribute("item") Item item, Model model) {
dbService.updateItem(item);
model.addAttribute("items",dbService.findAllItems());
return "view_items";
}
dbService与数据库一起使用。
我希望该程序在编辑所选项目并在数据库中对其进行更新后,将其发送给我所有项目的列表。
这是编辑表单的示例(网址:/ itemproject / edit_item / {id}
<spring:url value="edit_item" var="formURL"/>
<form:form action="${formURL}"
method="post" cssClass="col-md-8 col-md-offset-2"
modelAttribute="item"
>
<div class="form-group">
<label for="item-stuff">Stuff</label>
<form:input id="item-stuff"
cssClass="form-control"
path="stuff"/>
</div>
<button type="submit" class="btn btn-default">Edit item</button>
</form:form>
这是我的商品列表页面的外观(网址:/ itemproject / view_items)
<body>
<table class="table table-hover">
<tbody>
<tr>
<th>Stuff</th>
</tr>
<c:forEach items="${items}" var="item">
<tr>
<td><a href="/itemproject/item/${item.id}">${item.stuff}</a></td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
最佳答案
从Spring文档:
在Spring MVC中,您可以在方法上使用@PathVariable
批注
将其绑定到URI模板变量的值的参数
这意味着@PathVariable
批注适用于使用GET方法的原因,因为使用GET方法时,您可以传递查询字符串。
而是尝试使用@RequestBody
来尝试将POST HTTP正文消息绑定到您的参数
例如:
@RequestMapping(value = "/edit_item", method = RequestMethod.POST)
public String editItemComplete(@RequestBody String body) {
//in here you'll have to pull the body content
return "view_items";
}
假设您要在HTTP POST主体上发送一个Integer ID,然后可以像这样从主体中提取数据:
@RequestMapping(value = "/edit_item", method = RequestMethod.POST)
public String editItemComplete(@RequestBody String body) {
ObjectMapper objectMapper = new ObjectMapper();
try {
idJson = objectMapper.readTree(body).path("id").asInt();
} catch (IOException e) {
e.printStackTrace();
}
return "view_items";
}
假设您要将json从客户端发送到服务。