我正在开发一个Spring Boot应用程序,使用@RestController
和@RequestMapping
注解来公开端点。
最近我发现了Spring Data Rest中定义的投影概念(@Projection
注释接口和@RepositoryRestResource
注释的JPA存储库),我想将这个概念应用到我的现有服务中。
根据我对这篇文章Spring Boot Projection with RestController的理解(如有错误,请纠正我),@RestController
和@RepositoryRestResource
类都定义了端点。因此,这些注释似乎相当不兼容。
是否有一个Spring组件可以简单地将投影概念应用于@RestController
端点?
是否有一种方法可以手动重定向请求从一个端点到另一个端点?(例如,使用@RestController
端点作为某种代理,在重定向请求到@RepositoryRestResource
端点之前执行控制或其他操作)
编辑:我添加了我最终想要的代码的一瞥。
@RestController
public class MyController {
@RequestMapping(value = "/elements/{id}", method = RequestMethod.GET)
public ResponseEntity<Element> getElements(
@PathVariable("id") Integer elementId,
@RequestParam("projection") String projection,
@RequestHeader(value = "someHeader") String header{
// [manual controls on the header then call to a service which returns the result]
}
}
@Entity
public class Element {
private Integer id;
private String shortField;
private String longField;
private List<SubElement> subElements;
// [Getters & setters]
}
@Projection(name = "light", types = {Element.class})
interface ElementLight {
public Integer getId();
public String getShortField();
}
如果我调用
/elements/4
,我将得到 id 等于 4 的完整元素。
如果我调用 /elements/4?projection=light
,我将只得到 id 和 short 字段等简短的元素信息。
@RestController
用于手动创建任何RESTful端点,而@RepositoryRestResource
用于将存储库更多或更少地公开为RESTful端点,因此您不必手动执行该操作。@Projection
注释是一个spring-data特定的注释,允许自定义实体的公开方式。有一种更通用的方法可以在Json对象上使用视图,那就是Jackson的@JsonView
:https://dev59.com/eX_aa4cB1Zd3GeqP6rNP#30307335 - 这是你想要的吗?关于重定向,您可以@Autowire
其他控制器并调用Java方法。 - zapl@JsonView
可能很有趣:我会研究一下,谢谢。虽然它可能不完全是我需要的。 - Eria