Springboot如何在发送响应之前修改实体中的列表

时间:2019-10-24 12:05:55

标签: java spring spring-boot jpa spring-data-jpa

如何在发送实体之前修改实体中的列表?

说明:

我有一个Building实体,其中包含Flat列表:

@Entity
@Table(name = "building")
public class Building {

...

@OneToMany(mappedBy = "building", cascade = CascadeType.ALL)
private Set<Flat> flats;
}

我还有一个User对象,其角色为:经理或商业。经理可以看到所有单位,但是商业只能看到他创建的单位。

现在我需要一个端点来查找建筑物:

@RestController
@RequestMapping("/building")
public class BuildingController {
    @GetMapping("/{id}")
    public Building getBuildingById(@PathVariable(value = "id") Long id) {
        return buildingService.findById(id);
    }
}

但是在这种情况下,即使用户是商业用户,也会发送此建筑物拥有的所有单位。 如何修改单位列表以仅发送好人列表?

1 个答案:

答案 0 :(得分:0)

我发现的解决方案是使用数据传输对象(DTO)。从数据库中获取实体时,我将创建一个DTO,并在发送前仅用所需的信息填充它。这是BuildingDto.java的一个示例:

public class BuildingDto implements Serializable {
    ...
    private List<FlatDto> flats;
    private List<FlatUnauthorizedDto> flatsUnauthorized;

    // Constructors + getters + setters
}