Spring数据Rest修补程序请求不填充字段不支持的临时属性

Spring数据Rest修补程序请求不填充字段不支持的临时属性,spring,spring-data-rest,transient,http-patch,Spring,Spring Data Rest,Transient,Http Patch,我想在一个实体“用户”上实现一个补丁重新查询,用一个附加的临时属性“oldpassword”更改密码,以便在EventHandler中对其进行比较 POST和PUT请求填充属性 修补程序请求不正确:“oldpassword”为空 我正在使用 spring启动程序父级 弹簧启动启动器数据休息(2.1.6) 弹簧靴启动器web(2.1.6) 弹簧启动启动器数据jpa(2.1.6) spring数据jpa 2.1.9 弹簧数据保持架3.1.9 spring security 5.1.5(可能不相关)

我想在一个实体“用户”上实现一个补丁重新查询,用一个附加的临时属性“oldpassword”更改密码,以便在EventHandler中对其进行比较

POST和PUT请求填充属性

修补程序请求不正确:“oldpassword”为空

我正在使用

  • spring启动程序父级
  • 弹簧启动启动器数据休息(2.1.6)
  • 弹簧靴启动器web(2.1.6)
  • 弹簧启动启动器数据jpa(2.1.6)
  • spring数据jpa 2.1.9
  • 弹簧数据保持架3.1.9
  • spring security 5.1.5(可能不相关)
我试过了

  • 注释@JsonProperty(“oldpassword”)(即使是POST和PUT工作)
  • 注释@JsonDeserialize()
  • 将Jackson配置为禁用对@Transient注解()的检查
  • @JsonAutoDetect(fieldVisibility=Visibility.ANY)作为类装饰器
简化代码为:

实体“用户”

@实体
公共类用户实现UserDetails,可序列化{
[...]
@NotNull
字符串密码;
@短暂的
字符串newpassword;
@短暂的
字符串密码;
public void setPassword(字符串密码){
this.newpassword=密码;
}
public void setOldpassword(字符串oldpassword){
this.oldpassword=oldpassword;
}
[...]
}
存储库

@RepositoryRestResource(exported=true)
公共接口用户存储库扩展了JpaRepository{
}
补丁请求(

事件处理程序

@组件
@RepositoryEventHandler(User.class)
公共类UserEventHandler{
@车把前槽
公共无效打印数据(用户p){
/*返回新密码*/
System.out.println(“newpassword”+p.newpassword);
/*返回null(如果是修补程序请求)*/
System.out.println(“oldpassword”+p.oldpassword);
/*返回旧的持久密码*/
System.out.println(“密码”+p.password);
}
}

临时属性“newpassword”有效,因为我使用了持久属性“password”的setter。

您似乎想创建一个更改密码功能。它不会以这种方式工作。请为它创建一个唯一的控制器方法


无论如何,这不是一个标准的REST请求。

您似乎想创建一个更改密码功能。它不会以这种方式工作。请为它创建一个唯一的控制器方法


无论如何,这不是一个标准的REST请求。

作为错误报告给SDR。@瞬态注释不会反序列化MongoRepository修补程序请求[DATAREST-1524]上的字段.DATAREST-1524-修复使用setter反序列化瞬态域的问题。#381.太好了,谢谢你提供的信息。我放弃了该方法。但很高兴知道。作为错误报告给SDR。@瞬态注释不会反序列化MongoRepository修补程序请求上的域[DATAREST-1524].DATAREST-1524-修复了带有setter的瞬态场的反序列化问题。#381.太好了,谢谢你提供的信息。我放弃了这种方法。但很高兴知道。
      HTTP Method = PATCH
      Request URI = /api/users/2
       Parameters = {}
          Headers = [Content-Type:"application/json;charset=UTF-8", Authorization:"Basic aXJ0Z2VuZGFhczpFaW4gcGFzc3dvcmQ="]
             Body = {
    "username": "myusername",
    "password": "mynewpassword",
    "oldpassword": "theoldone"
}