Spring-如何从对象列表中删除属性?

时间:2019-01-31 14:39:51

标签: spring spring-boot jpa collections

我有一个具有以下属性的“人”实体,

Id
Name
F-Name
Age
Address

当我在Person上调用存储库函数findAll()时,它将返回一个Persons列表。

List<Person> list = somefuntionToConvertIterableToList(personRepository.findAll());

此列表包含多个“人员类型”对象。

人员...... ... Id1,Name1,F-Name1,Age1,Address1

人员....... IdN,NameN,F-NameN,AgeN,地址N

我需要从所有人中删除“ Id”,我该怎么办?

我知道我们可以使用“删除”来删除列表中的元素,但是如何删除元素中的属性?

2 个答案:

答案 0 :(得分:0)

您当然可以将id设置为null或在序列化中添加忽略,但是也许您根本不想加载id。然后,通常您将使用DTOTuple决定要填充的字段。因此,不要首先填充所有内容,然后删除不需要的内容(我没有使用您的Person,而只是使用了一个简化的示例类)。

存储库中的元组查询就像(JPQL):

@Query("SELECT te.name AS name, te.created as created FROM TestEntity te")
List<Tuple> findAllTuple();

这将需要额外的工作,以使元组在序列化时对应于原始实体。因此最好使用DTO,例如:

// This class would be exactly as your Person but without that id
@AllArgsConstructor // you need the constructor for new in jpql
public class TestEntityDto {
    private String name;
    private LocalDateTime created;
}

,而您存储库中的查询将是:

@Query("SELECT NEW org.example.data.entity.dto.TestEntityDto(te.name, te.created) FROM TestEntity te")
List<TestEntityDto> findAllDto();

答案 1 :(得分:0)

我认为您需要使用:@JsonIgnore in Id如下:

@JsonIgnore
   Field you want remove in reponse.

或者您可以创建DTO并将想要返回的所有字段都显示为:

  public class PersonDTO {
      //all field you want return
   }