Spring HATEOAS使用RepresentationModelAssemblerSupport为关联实体创建href吗?

时间:2019-12-22 05:49:02

标签: spring-boot spring-hateoas hateoas

我正在研究Spring Boot HATEOAS示例。我正在跟踪链接:https://docs.spring.io/spring-hateoas/docs/current/reference/html/

在我的示例中,我有两个实体ActorAlbum。一个Actor与许多专辑相关联,并且已经创建了@ManyToOne双向关系。我已经开发了RepresentationModelAssemblerSupport,但是似乎我没有办法为Albums对象创建 href ,而仅为Actor创建。 >

@Service
public class ActorModelAssembler extends RepresentationModelAssemblerSupport<Actor, ActorModel> {

    public ActorModelAssembler() {
        super(ActorController.class, ActorModel.class);
    }

    @Override
    public ActorModel toModel(Actor entity) {
        ActorModel actorModel = createModelWithId(entity.getActorId(), entity);

        actorModel.setActorId(entity.getActorId());
        actorModel.setFirstName(entity.getFirstName());
        actorModel.setLastName(entity.getLastName());
        actorModel.setLastUpdated(entity.getLastUpdated());
        actorModel.setAlbums(toAlbumModel(entity.getAlbums()));

        return actorModel;
    }

    private List<AlbumModel> toAlbumModel(List<Album> albums) {
        if (albums.isEmpty())
            return null;

        return albums.stream()
                .map(album -> AlbumModel.builder().albumId(album.getAlbumId())
                        .description(album.getDescription())
                        .releaseYear(album.getReleaseYear())
                        .title(album.getTitle()).build())
                .collect(Collectors.toList());
    }
}

ActorModel

@Data
@Builder
@EqualsAndHashCode(callSuper = false)
@AllArgsConstructor
@NoArgsConstructor
@XmlRootElement(name = "actor")
public class ActorModel extends RepresentationModel<ActorModel> {
    private Long actorId;
    private String firstName;
    private String lastName;
    private LocalDate lastUpdated;
    private List<AlbumModel> albums;
}

AlbumModel

@Data
@Builder
@EqualsAndHashCode(callSuper = false)
@AllArgsConstructor
@NoArgsConstructor
@XmlRootElement(name = "album")
public class AlbumModel extends RepresentationModel<AlbumModel>{
    private Long albumId;
    private String title;
    private String description;
    private String releaseYear;
}

0 个答案:

没有答案