spring 忽略Sping Boot Data JPA中返回的字段,不使用DTO/带注解

zlwx9yxi  于 2024-01-05  发布在  Spring
关注(0)|答案(2)|浏览(222)

如何忽略BaseEntity类中用于继承的3个时间戳字段,使其不被控制器返回。

  • 不从DB完全返回它们也是一种选择。
  1. public abstract class BaseEntity {
  2. @Id
  3. @GeneratedValue(strategy = GenerationType.AUTO)
  4. @Column(name = "id", updatable = false, nullable = false)
  5. private UUID id;
  6. @JsonIgnore
  7. @CreatedDate
  8. @Column(name = "created_at", updatable = false)
  9. private Date createdAt;
  10. @JsonIgnore
  11. @LastModifiedDate
  12. @Column(name = "updated_at")
  13. private Date updatedAt;
  14. @JsonIgnore
  15. @JsonIgnore
  16. @Column(name = "deleted_at")
  17. private Date deletedAt;
  18. }

字符串
正如你所看到的,我尝试使用:

  • @JsonIgnore作为字段注解(com.fasterxml.Jackson.annotation.JsonIgnore)
  • @JsonIgnoreProperties作为字段注解
  • @JsonIgnoreProperties({"createdAt", "updatedAt", "deletedAt"})作为类注解
  • 禁用spring.jackson.serialization.FAIL_ON_EMPTY_BEANS

@Transient似乎是“createdAt”的错误选项,因为这需要持久化。

  • edit *:我使用Spring 3(spring-boot-starter-data-jpa:3.0.5)
zaq34kh6

zaq34kh61#

要排除返回的时间戳字段(createdAt、updatedAt和deletedAt),可以在类级别使用@JsonIgnoreProperties注解。
应该可以

  1. @JsonIgnoreProperties({"createdAt", "updatedAt", "deletedAt"})
  2. public abstract class BaseEntity {
  3. @Id
  4. @GeneratedValue(strategy = GenerationType.AUTO)
  5. @Column(name = "id", updatable = false, nullable = false)
  6. private UUID id;
  7. @CreatedDate
  8. @Column(name = "created_at", updatable = false)
  9. private Date createdAt;
  10. @LastModifiedDate
  11. @Column(name = "updated_at")
  12. private Date updatedAt;
  13. @Column(name = "deleted_at")
  14. private Date deletedAt;}

字符串

展开查看全部
iqjalb3h

iqjalb3h2#

@JsonIgnoreProperties应该可以工作,但是你应该在子类上使用这个注解,而不是在基类上。

  1. @JsonIgnoreProperties({"createdAt", "updatedAt", "deletedAt"})
  2. public class SubClass extends BaseEntity
  3. {
  4. // const, set, get etc.
  5. }

字符串
您也可以使用Mix-ins与对象Map器,如这里所述-> Inheritance in Jackson

相关问题