当前位置: 首页 > 知识库问答 >
问题:

如何在spring boot中更新单个表列而不更新其余的属性?

陆臻
2023-03-14

我正在开发一个使用spring Boot的汽车销售系统。当汽车经销商发布出售的汽车时,默认情况下,汽车状态设置为“挂起”,管理员应该批准发布。我想更新这辆车的状态,而不更新一辆车的其他属性(milleage,price,model,等等)。所以我尝试使用put,但我得到一个错误,即POST是不允许的。这是我的代码。对于类似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);
   }
@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将状态更新为“已批准”。但我得到了错误mehtod POST不允许。从上面可以看出我的method=“put”不是post。我不知道哪里出了问题。

共有1个答案

郎翔
2023-03-14

spring security可能在您的项目中被激活,默认情况下,当您使用spring security时,csrf保护是启用的,因此您需要在请求头中发送csrf参数或停用csrf。

这里可以看到如何发送头参数:Spring MVC PUT Request returns 405 Method Not Allowed

以及如何停用CSRF:在Spring Boot中启用HTTP请求POST

第二种选择只用于开发!停用crsf保护会使应用程序不安全。

 类似资料:
  • 我有两份清单: 我想要一个新的名单,比如: 我尝试了以下方法: 但有一些严重的错误

  • 问题内容: 我创建了一个SQL查询,该查询更新了一个表列,其中另一列=值 代码: 问题出在。如何使其使用这些ID更新列? 问候。 问题答案: 替换为

  • 问题内容: 我正在NHibernate中对单个属性执行标准更新。但是,在提交事务时,sql更新似乎设置了我映射到表上的所有字段,即使它们没有更改。当然这不是Nhibernate中的正常行为吗?难道我做错了什么?谢谢 问题答案: 这是正常现象。您可以尝试添加到类定义中以覆盖此行为。

  • 因此,我在DynamoDB中有一项: 我想添加一个新的属性到上述项目,属性是: 现在,我在JS中使用AWS-SDK这样做: 但是,我得到一个错误: ExpressionAttributeValue包含无效值:一个或多个参数值无效:AttributeValue不能包含key:newAttr的空字符串 所以如果我是这样就可以了,但我不希望这个新属性是一个字符串,我希望它是一个列表。 那么我做错了什么?

  • 问题内容: 内容: 我要从更改为。这是我的代码: 输出内容: 其他属性将被删除。我想更新一个特定的属性值,而不删除其他属性。 问题答案: 关闭输入流后,打开输出流并存储属性。