我正在开发一个使用弹簧靴的汽车销售系统。当汽车经销商张贴一辆汽车在出售,汽车状态被设置为待定默认和管理员应该批准的帖子。我想要更新这个汽车状态,而不更新汽车的其他属性(里程,价格,型号等)。所以我试着使用put,但是我得到了一个错误,这个帖子是不允许的。这是我的代码很远。任何类似mysql语句集columnName = newValue的洞察力,其中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从视图url.中获取产品id。
@PutMapping("/updateStatus/{carId}")
public void updateStatus(@PathVariable("carId") Long carId){
productService.updateStatus(carId);
}
--这是我的thymeleaf视图部分,负责从.获取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将用于将状态更新为已批准状态。但我不允许犯错误。正如您从上面看到的,我的method="put“不是POST。我不知道出了什么问题。
发布于 2020-01-23 17:34:25
可能spring安全性是在您的项目中激活的,默认情况下,当您使用spring安全性时会启用csrf保护,因此您需要在请求头中发送csrf参数或禁用csrf。
在这里您可以看到如何发送标头参数: Spring MVC PUT Request returns 405 Method Not Allowed
和这里如何禁用csrf: Enable HTTP Request POST in Spring Boot
只对开发使用第二个选项!,您可以使应用程序不安全,使crsf保护失效。
https://stackoverflow.com/questions/59883349
复制相似问题