【问题标题】:Spring Data Rest PATCH requests do not fill transient properties not backed by a fieldSpring Data Rest PATCH 请求不填充不受字段支持的瞬态属性
【发布时间】:2019-11-29 15:33:31
【问题描述】:

我想在实体“用户”上实现 PATCH-Requese,以使用附加的临时属性“旧密码”更改密码,以便在 EventHandler 中进行比较。

POST 和 PUT 请求填充属性。

PATCH 请求没有:'oldpassword' 为空。

我正在使用

  • spring-boot-starter-parent
  • spring-boot-starter-data-rest (2.1.6)
  • spring-boot-starter-web (2.1.6)
  • spring-boot-starter-data-jpa (2.1.6)
  • spring-data-jpa 2.1.9
  • 弹簧数据休息 3.1.9
  • spring-security 5.1.5(可能不相关)

我试过了

简化代码为:

实体“用户”

@Entity
public class User implements UserDetails, Serializable {

    [...]

    @NotNull
    String password;

    @Transient
    String newpassword;

    @Transient
    String oldpassword;


    public void setPassword(String password) {
        this.newpassword = password;
    }

    public void setOldpassword(String oldpassword) {
        this.oldpassword = oldpassword;
    }

    [...]



}

存储库

@RepositoryRestResource(exported = true)
public interface UserRepository extends JpaRepository<User, Long> {
}

补丁请求(

      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"
}

事件处理程序

@Component
@RepositoryEventHandler(User.class)
public class UserEventHandler {

    @HandleBeforeSave
    public void printdata(User p) {
        /* returns the new password*/
        System.out.println("newpassword" + p.newpassword);

        /* returns null (if it's a PATCH-request) */
        System.out.println("oldpassword" + p.oldpassword);

        /* returns the old persisted password */
        System.out.println("password" + p.password);
    }

}

瞬态属性“newpassword”有效,因为我使用了持久属性“password”的设置器。

【问题讨论】:

标签: spring spring-data-rest transient http-patch


【解决方案1】:

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

这不是标准的 REST 请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 2015-03-07
    相关资源
    最近更新 更多