Spring DATA REST - 如何使用默认 spring 实现将实体转换为自定义控制器中的资源
Spring DATA REST - How to convert entities to resources in custom controller using default spring implementation
我创建了一个需要将实体转换为资源的自定义控制器。我已经使用 @RepositoryRestResource 注释对我的存储库进行了注释。我想知道是否有一种方法可以从我的自定义控制器调用 spring Data REST 的默认功能,该控制器将实体序列化为资源,并链接到嵌入其中的其他实体。
我不想 return 来自我的处理程序方法的实体,而是资源。
谢谢。
很简单,使用对象Resource
或Resources
。例如 - 在这个控制器中,我们添加了自定义方法,其中 return 所有用户角色的列表都是枚举:
@RepositoryRestController
@RequestMapping("/users/roles")
public class RoleController {
@GetMapping
public ResponseEntity<?> getAllRoles() {
List<Resource<User.Role>> content = new ArrayList<>();
content.addAll(Arrays.asList(
new Resource<>(User.Role.ROLE1),
new Resource<>(User.Role.ROLE2)));
return ResponseEntity.ok(new Resources<>(content));
}
}
要添加指向资源的链接,您必须使用对象 RepositoryEntityLinks
,例如:
@RequiredArgsConstructor
@RepositoryRestController
@RequestMapping("/products")
public class ProductController {
@NonNull private final ProductRepo repo;
@NonNull private final RepositoryEntityLinks links;
@GetMapping("/{id}/dto")
public ResponseEntity<?> getDto(@PathVariable("id") Integer productId) {
ProductProjection dto = repo.getDto(productId);
return ResponseEntity.ok(toResource(dto));
}
private ResourceSupport toResource(ProductProjection projection) {
ProductDto dto = new ProductDto(projection.getProduct(), projection.getName());
Link productLink = links.linkForSingleResource(projection.getProduct()).withRel("product");
Link selfLink = links.linkForSingleResource(projection.getProduct()).slash("/dto").withSelfRel();
return new Resource<>(dto, productLink, selfLink);
}
}
有关更多示例,请参阅我的'' and sample project。
我创建了一个需要将实体转换为资源的自定义控制器。我已经使用 @RepositoryRestResource 注释对我的存储库进行了注释。我想知道是否有一种方法可以从我的自定义控制器调用 spring Data REST 的默认功能,该控制器将实体序列化为资源,并链接到嵌入其中的其他实体。
我不想 return 来自我的处理程序方法的实体,而是资源。
谢谢。
很简单,使用对象Resource
或Resources
。例如 - 在这个控制器中,我们添加了自定义方法,其中 return 所有用户角色的列表都是枚举:
@RepositoryRestController
@RequestMapping("/users/roles")
public class RoleController {
@GetMapping
public ResponseEntity<?> getAllRoles() {
List<Resource<User.Role>> content = new ArrayList<>();
content.addAll(Arrays.asList(
new Resource<>(User.Role.ROLE1),
new Resource<>(User.Role.ROLE2)));
return ResponseEntity.ok(new Resources<>(content));
}
}
要添加指向资源的链接,您必须使用对象 RepositoryEntityLinks
,例如:
@RequiredArgsConstructor
@RepositoryRestController
@RequestMapping("/products")
public class ProductController {
@NonNull private final ProductRepo repo;
@NonNull private final RepositoryEntityLinks links;
@GetMapping("/{id}/dto")
public ResponseEntity<?> getDto(@PathVariable("id") Integer productId) {
ProductProjection dto = repo.getDto(productId);
return ResponseEntity.ok(toResource(dto));
}
private ResourceSupport toResource(ProductProjection projection) {
ProductDto dto = new ProductDto(projection.getProduct(), projection.getName());
Link productLink = links.linkForSingleResource(projection.getProduct()).withRel("product");
Link selfLink = links.linkForSingleResource(projection.getProduct()).slash("/dto").withSelfRel();
return new Resource<>(dto, productLink, selfLink);
}
}
有关更多示例,请参阅我的'