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

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

皇甫波峻
2023-03-14

我想在一个实体'user'上实现一个补丁请求,用一个附加的临时属性'oldpassword'更改密码,以便在EventHandler中进行比较。

    null

我试过了

  • 注释@JsonProperty(“oldPassword”)(即使POST和PUT工作)。
  • 注释@JsonDeserialize(json:@transient field not seralizing)
  • 配置Jackson以禁用@Transient注释(JPA Transient注释和JSON)的检查
  • @JSONAutoDetect(fieldVisibility.any)作为类修饰符

简化代码为:

@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'的setter。

共有1个答案

唐兴发
2023-03-14

您似乎想创建一个更改密码功能。这样不行的。为其创建唯一的控制器方法。

反正也不是标准的REST请求。

 类似资料:
  • 我对PersondTo有以下定义: 下面是一个示例记录: 现在,无名氏离婚了。所以我需要向这个URL发送补丁请求: 我想不出该怎么做。以下是我到目前为止所做的尝试: 以下是上面的问题: 1)由于我只设置了MaritalStatus,其他字段都将为null。因此,如果我打印出请求,它将如下所示: 请欣赏那些编写客户机应用程序的人提出的使用Spring的RESTTemplate使用Restful we

  • 我正在使用锻造API。我需要执行补丁请求。当我使用邮递员发送它时,一切都很好,但是当我使用HttpquiestMessage构建请求时,我会得到一个响应-"415不支持的媒体类型"。由API留档Content-Type I设置为"应用程序/vnd.apijson"。 邮递员的请求正文 请求对象结构

  • 我正在尝试进行http补丁请求,但我总是得到404错误,所以可能是我的连接设置不正确: 我收到404错误,未找到。当使用Postman执行相同的请求时,这是有效的…谢谢你的帮助。

  • 好吧,我有以下几个Shemas: 我想要的是让用户跟踪品牌,按品牌名排序,所以对于这样做,我对FollowAction进行查询,找到用户所做的所有FollowAction,然后填充brand字段。 所以问题是我不能为品牌名的查询排序,我知道的唯一方法是返回所有文档并从nodejs应用程序中对它们进行排序。有人知道我怎么能那样做吗??或者我是否应该改变shema结构?? 我所做的查询是:

  • 问题内容: 我已经多次看到,负填充的前景可能会帮助某些页面元素的CSS开发变得越来越好。但是,W3C CSS中没有负填充的规定。这背后的原因是什么?该属性是否有阻碍其使用的阻碍?感谢您的回答。 更新 例如,我看到的情况是,如果您使用的字体的垂直间距为20px,并且希望在字体底部应用虚线边框,例如出现超链接时。在这种情况下,您会发现样式太简陋,因为虚线边框会出现在指定单词下方20px。如果您使用负边

  • 我有一个带有spring框架的Java8应用程序。我们需要从应用程序中使用REST调用补丁操作。 代码片段如下: 请指教。