我正在使用 Spring Boot 开发一个汽车销售系统。当汽车经销商发布出售汽车时,汽车状态默认设置为“待处理”,管理员应批准该发布。我想更新这辆车的状态,而不更新汽车的其他属性(里程、价格、型号等)。所以我尝试使用 put 但出现错误,不允许 POST。到目前为止,这是我的代码。任何类似于 mysql 语句 set columnName = newValue where id = id 的见解,我的代码正在使用 @PathVariable 获取。
产品存储库(用于更新单个列)
@Modifying
@Query(value = "update Product p set p.status = :status where p.carId= :carId")
void setUpdateStatus (@Param("status") String status, @Param("carId") Long carId);
更新状态的产品服务方法。
public void updateStatus( Long carId){
productRepository.setUpdateStatus("APPROVED",carId);
}
使用 @PathVariable 从 View URL 中获取产品 ID 的 Controller 方法。
@PutMapping("/updateStatus/{carId}")
public void updateStatus(@PathVariable("carId") Long carId){
productService.updateStatus(carId);
}
这是我的 thymeleaf View 部分,负责我从中获取 id 的 url。
<form action="#" th:action="@{'/updateStatus/'+${pending.carId}}" th:method="put" >
<input type="hidden" name="_method" value="put" />
<button type="submit" id="Approve" name="Approve"> </button>
</form>
我希望使用该 ID 将状态更新为“已批准”。但我收到错误 mehtod POST not allowed。正如您从上面看到的,我的 method="put"不是 POST。我不知道出了什么问题。
最佳答案
可能你的项目中开启了spring security,使用spring security时默认开启了csrf保护,所以你需要在请求头中发送csrf参数或者关闭csrf。
在这里您可以看到如何发送 header 参数: Spring MVC PUT Request returns 405 Method Not Allowed
如何停用 csrf: Enable HTTP Request POST in Spring Boot
仅将第二个选项用于开发!停用 crsf 保护可能会使您的应用程序变得不安全。
关于java - 如何在 Spring Boot 中更新单个表列而不更新其余属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59883349/