代码之家  ›  专栏  ›  技术社区  ›  WesternGun

Spring数据Rest-隐藏而不是公开ID

  •  3
  • WesternGun  · 技术社区  · 6 年前

    @Id 而且我没有任何代理ID(仅为表ID创建的字段)字段。在Jackson编组的JSON中,我看到了一个额外的 id

    所以不是:

    {
        "bin":"123456", ...
    }
    

    {
        "id":"123456", "bin":"123456", ...
    }
    

    我不想要,因为它们是重复的信息。我怎样才能防止这种情况?

    豆子:

    @Entity
    @Data
    @Table(name="bin_info")
    public class BinInfo implements Serializable, Persistable<String> {
        @Id
        @NotBlank //this is for absent parameter. Not equal to Pattern regex check
        @Pattern(regexp = "^\\d{6,8}$") //6-8 digits
        @Column(name="bin")
        @JsonProperty("bin")
        private String bin;
    
        ...
    

    我支持这些依赖关系:

    dependencies {
        compile('org.springframework.boot:spring-boot-starter-actuator')
        compile('org.springframework.boot:spring-boot-starter-aop')
        compile('org.springframework.boot:spring-boot-starter-data-jpa')
        compile('org.springframework.boot:spring-boot-starter-data-rest')
        compile('org.springframework.boot:spring-boot-starter-web')
        compile('org.springframework.boot:spring-boot-starter-undertow')
        runtime('com.h2database:h2')
        runtime('org.postgresql:postgresql')
        testCompile('org.springframework.boot:spring-boot-starter-test')
        testCompile('io.cucumber:cucumber-java:3.0.2')
        testCompile('io.cucumber:cucumber-junit:3.0.2')
        testCompile('io.cucumber:cucumber-spring:3.0.2')
    }
    

    弹簧靴2.0.3。

    3 回复  |  直到 4 年前
        1
  •  0
  •   Alien    6 年前

    尝试用注释 @NaturalId 而不是 @Id

        2
  •  0
  •   WesternGun    6 年前

    谢谢大家,我认为这与Spring或Jackson的一些配置有关,它们将自动公开用 @Id

    一些同事建议我定义一个DTO,而不是把 @Jsonxxx 类中的注释,表示模型表示数据模型并与表相关,而DTO与视图层相关。所以我做了,现在一切都好了。

    现在这个模型是免费的 id 现场和 @JsonProperty / @JsonIgnore

    @Entity
    @Data
    @Table(name="bin_info")
    public class BinInfo implements Serializable, Persistable<String> {
        @Id
        @NaturalId
        @NotBlank //this is for absent parameter. Not equal to Pattern regex check
        @Pattern(regexp = "^\\d{6,8}$") //6-8 digits
        @Column(name="bin")
        //@JsonProperty("bin")
        private String bin;
    
        ...
    

    DTO完全没有 @身份证 :

    @Data
    public class BinInfoDTO {
        @JsonProperty("bin")
        private String bin;
    
        @JsonProperty("json_full")
        private String json_full;
    
        ...
    

        3
  •  -2
  •   alltej    6 年前

    @JsonIgnore