如何在不更新其余属性的情况下更新 Spring 启动中的单个表列?



我正在开发一个使用弹簧靴的汽车销售系统。当汽车经销商发布特价汽车时,默认情况下,汽车状态设置为"待处理",管理员应批准该帖子。我想在不更新汽车的其他属性(千价、价格、型号等(的情况下更新此汽车状态。所以我尝试使用 put 但出现不允许开机自检的错误。这是我到目前为止的代码。有关类似于 mysql 语句集列名称 = 新值的任何见解,其中 id = 我的代码使用 @PathVariable 获取的 id。

产品存储库(用于更新单个列(

@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 从视图 URL 获取产品 ID 的控制器方法。

@PutMapping("/updateStatus/{carId}")
public void updateStatus(@PathVariable("carId") Long carId){
productService.updateStatus(carId);
}

这是我的百里香叶视图部分,负责我从中获取 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 不允许。从上面可以看出,我的方法="放"而不是POST。我不知道出了什么问题。

可能是在您的项目中激活了 Spring 安全性,默认情况下,当您使用 Spring 安全性时启用了 CSRF 保护,因此您需要在请求标头中发送 csrf 参数或停用 csrf。

在这里,您可以看到如何发送标头参数:弹簧 MVC PUT 请求返回 405 方法不允许

以下是停用csrf的方法:在Spring Boot中启用HTTP Request POST。

仅将第二个选项用于开发!您可以使应用程序不安全地停用 crsf 保护。

最新更新