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

zlwx9yxi  于 5个月前  发布在  Spring
关注(0)|答案(2)|浏览(106)

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

  • 不从DB完全返回它们也是一种选择。
public abstract class BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", updatable = false, nullable = false)
    private UUID id;

    @JsonIgnore
    @CreatedDate
    @Column(name = "created_at", updatable = false)
    private Date createdAt;

    @JsonIgnore
    @LastModifiedDate
    @Column(name = "updated_at")
    private Date updatedAt;

    @JsonIgnore
    @JsonIgnore
    @Column(name = "deleted_at")
    private Date deletedAt;

}

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

  • @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注解。
应该可以

@JsonIgnoreProperties({"createdAt", "updatedAt", "deletedAt"})
public abstract class BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", updatable = false, nullable = false)
private UUID id;

@CreatedDate
@Column(name = "created_at", updatable = false)
private Date createdAt;

@LastModifiedDate
@Column(name = "updated_at")
private Date updatedAt;

@Column(name = "deleted_at")
private Date deletedAt;}

字符串

iqjalb3h

iqjalb3h2#

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

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

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

相关问题