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

默认情况下,不在实体类中公开字段,使用Spring Data Rest和Jpa

段干博涉
2023-03-14

我是否可以反转曝光,以便显式地启用导出字段,默认情况下不公开字段?

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import lombok.Data;
import lombok.ToString;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

import com.fasterxml.jackson.annotation.JsonIgnore;

@Data
@ToString(exclude = "password")
@Entity
public class Account {

    public static final PasswordEncoder PASSWORD_ENCODER = new BCryptPasswordEncoder();

    private @Id @GeneratedValue Long id;

    private String name;

    @JsonIgnore private String password;

    private String[] roles;

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

    protected Account() {}

    public Account(String name, String password, String... roles) {

        this.name = name;
        this.setPassword(password);
        this.roles = roles;
    }

}

使用Spring数据在这里Rest,所以其他所有的东西都只是存储库,没有额外的层来做一些聪明的事情。

共有1个答案

危烨煜
2023-03-14

Jackson库中获得“白名单”属性效果的主要方法有两种

第一种方式:

Account类中删除@data注释,并只向要公开的字段添加getter。为了确保没有getter的属性不会被排除在外,向帐户类添加@jsonignoreproperties(ignoreunknown=true)

public class AccountForJson {

private Account account;

public MyClassForJson(Account accountToWrapped) {
    this.account = accountToWrapped;
}

/**
 * Example of property that you want to expose
 */
public String getName() {
    return this.account.getName();
 }
}
 类似资料:
  • 问题内容: 是否可以为类型选择性地启用elasticsearch字段的索引? 通过特定索引的映射设置,可以设置属性 {“ index”:“ not_analyzed”} 对于特定领域。由于我的文档中的字段太多,并且将来可能会更改结构,因此我需要一个映射,除非另行指定,否则默认情况下不会分析字段。 这可能吗? 问题答案: 是的- 看一下动态模板 请尝试以下操作: 动态模板适用于您的映射未涵盖的新字段

  • 问题内容: 我将实体添加到数据库中,并且工作正常。但是,当我检索列表时,会得到旧实体,直到取消取消部署应用程序并再次重新部署它之后,才会显示添加的新实体。这意味着默认情况下会缓存我的实体吗?但是,我没有在persistence.xml或任何此类文件中进行任何用于缓存实体的设置。 我什至尝试调用flush(),refresh()和merge()。但它仍然仅显示旧实体。我想念什么吗?请帮我。 问题答案

  • 问题内容: 我有一个称为Product的类和一些扩展它的子类。现在在我的注释中,我有很多类型,例如: 然后定义我的Product类。我想做的是,如果Jackson无法检测到该字段不符合任何这些结构,则返回 未知产品 我该如何使用Jackson @Type注释呢?它应该像是在名称中插入空白或在我实际上不知道的值中添加一些标志(我尝试创建扩展Product的UnknownProduct,并且在名称值中

  • 我正在使用一个PHP库将一个文件上传到我的bucket中。我已经将ACL设置为public read write,它可以正常工作,但文件仍然是私有的。 我发现如果我把被授权人改成所有人,文件就会公开。我想知道的是,如何将bucket中所有对象的默认grante设置为“Everyone”。或者有没有另一种默认公开文件的解决方案? 我使用的代码如下:

  • 这里,当url模式为“/login/new”时,不调用servlet,我通过打印到Console来验证这一点。它只适用于默认情况,即“/login” 期望的输出是应该调用“/new”大小写中的函数。我遗漏了什么?

  • 问题内容: 我有一个定义结构的快速框架: 但是,我似乎无法从导入该库的另一个项目中使用隐式成员明智的初始化程序。错误是“ CollectionTO”无法初始化,因为它没有可访问的初始化程序。也就是说,它没有为默认的隐式成员明智的初始化程序提供public关键字。 我必须像这样添加自己的初始化方法: …但是我宁愿不知道是否还有其他人知道的方法? 问题答案: 引用手册: “结构类型的默认成员明智的初始