java - 如何在 Spring Boot 中更新单个表列而不更新其余属性?

标签 java spring-boot spring-mvc spring-data-jpa thymeleaf

我正在使用 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/

相关文章:

java - Spring MVC : Multiple <a> tag in one form

java - 无法在 Flex 应用程序中从 Java 调用 Web 服务

java - 带有 spring boot JPA Postgresql 的 data.sql 未加载

java - 如何在Spring表单中隐藏选项?

spring - docker 镜像正在运行,但无法访问 Spring Boot 应用程序中的其余端点

java - 无法访问 Thymeleaf 中的 session 属性

javascript - 如何使用 reactjs 向服务器发送请求?

java - 在java中对二维数据结构进行排序

java - 在Thread算法工作期间重绘JPanel

java - 你能用谷歌端点设置一个简单的登录系统吗