如何使用 Java 泛型为实体创建 HAL 链接
How to use Java Generics for creating HAL links for entities
我正在使用 Springboot v 2.3.2。
我有不同的实体 class,比如 A 和 B。现在执行完 CRUD 操作后,我需要 return HAL 格式的响应。目前我已经在每个控制器 classes 中创建了方法。但是加班我可以看到这些本质上是相似的。因此,我正在考虑重构它并应用 Java 泛型。
这是一段代码。请指导我如何进行此更改或有其他更好的方法。
在这两种方法中,除了实体类型之外,一切都是相同的。
import org.springframework.hateoas.EntityModel;
private final RepositoryEntityLinks entityLinks;
private EntityModel<A> generateLinks(A a) {
EntityModel<A> resource = EntityModel.of(a);
resource.add(entityLinks.linkToItemResource(A.class, a.getId()).withSelfRel());
resource.add(entityLinks.linkToCollectionResource(A.class));
resource.add(entityLinks.linksToSearchResources(A.class));
return resource;
}
private EntityModel<B> generateLinks(B b) {
EntityModel<B> resource = EntityModel.of(b);
resource.add(entityLinks.linkToItemResource(B.class, b.getId()).withSelfRel());
resource.add(entityLinks.linkToCollectionResource(B.class));
resource.add(entityLinks.linksToSearchResources(B.class));
return resource;
}
这是实现此目的的方法。
public <T> EntityModel<T> generateLinks(T entity, Object id) {
EntityModel<T> resource = EntityModel.of(entity);
resource.add(entityLinks.linkToItemResource(entity.getClass(), id).withSelfRel());
resource.add(entityLinks.linkToCollectionResource(entity.getClass()));
resource.add(entityLinks.linksToSearchResources(entity.getClass()));
return resource;
}
我正在使用 Springboot v 2.3.2。
我有不同的实体 class,比如 A 和 B。现在执行完 CRUD 操作后,我需要 return HAL 格式的响应。目前我已经在每个控制器 classes 中创建了方法。但是加班我可以看到这些本质上是相似的。因此,我正在考虑重构它并应用 Java 泛型。
这是一段代码。请指导我如何进行此更改或有其他更好的方法。
在这两种方法中,除了实体类型之外,一切都是相同的。
import org.springframework.hateoas.EntityModel;
private final RepositoryEntityLinks entityLinks;
private EntityModel<A> generateLinks(A a) {
EntityModel<A> resource = EntityModel.of(a);
resource.add(entityLinks.linkToItemResource(A.class, a.getId()).withSelfRel());
resource.add(entityLinks.linkToCollectionResource(A.class));
resource.add(entityLinks.linksToSearchResources(A.class));
return resource;
}
private EntityModel<B> generateLinks(B b) {
EntityModel<B> resource = EntityModel.of(b);
resource.add(entityLinks.linkToItemResource(B.class, b.getId()).withSelfRel());
resource.add(entityLinks.linkToCollectionResource(B.class));
resource.add(entityLinks.linksToSearchResources(B.class));
return resource;
}
这是实现此目的的方法。
public <T> EntityModel<T> generateLinks(T entity, Object id) {
EntityModel<T> resource = EntityModel.of(entity);
resource.add(entityLinks.linkToItemResource(entity.getClass(), id).withSelfRel());
resource.add(entityLinks.linkToCollectionResource(entity.getClass()));
resource.add(entityLinks.linksToSearchResources(entity.getClass()));
return resource;
}