我正在研究Spring Boot HATEOAS示例。我正在跟踪链接:https://docs.spring.io/spring-hateoas/docs/current/reference/html/。
在我的示例中,我有两个实体Actor
和Album
。一个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;
}