java 在字段上应用@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)无效

mitkmikd  于 4个月前  发布在  Java
关注(0)|答案(1)|浏览(61)

我是Sping Boot 的新手,在我使用User模型时遇到了麻烦,我使用相同的模型来注册并返回响应给user。注册时,当然,我需要密码字段,当返回关于user的响应时,我不需要返回密码字段,因此,我尝试使用@JsonProperty(access = JsonProperty.Access.WRITE_ONLY),但是当我从数据库获取用户详细信息时,我仍然得到密码字段。我做错了什么?

package com.practice.todo.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;
    @NotBlank
    @Column(name = "name")
    private String name;
    @NotBlank
    @Column(name = "email", unique = true)
    @Pattern(regexp = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$", message = "Invalid Email Format")
    private String email;
    @NotBlank
    @Size(min = 8)
    @Column(name = "password")
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

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

    @Override
    public String toString() {
        return "User{" + "id=" + id + ", name='" + name + '\'' + ", email='" + email + '\'' + ", password='" + password + '\'' + '}';
    }
}

字符串

jv2fixgn

jv2fixgn1#

我刚刚检查了你的代码,它像预期的那样工作。password字段不包括在作为REST调用的响应返回的JSON字符串中。
但是它仍然包含在日志中。这是因为你将它包含在toString()方法中。最好从那里删除它。

相关问题