【问题标题】:Spring Boot @RestController endpoints and Spring Data Rest projectionsSpring Boot @RestController 端点和 Spring Data Rest 投影
【发布时间】:2015-12-21 10:47:23
【问题描述】:

我目前正在开发一个使用 @RestController@RequestMapping 注释公开端点的 Spring Boot 应用程序。

我最近发现了 Spring Data Rest 中定义的投影概念(@Projection-annotated 接口和 @RepositoryRestResource-annotated 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 = 4 的 Element 的 id 和短字段。

【问题讨论】:

  • 你能解释一下你的目标是什么吗? @RestControllers 用于手动创建任何 RESTful 端点,而@RepositoryRestResource 用于将存储库或多或少 1:1 公开为 RESTful 端点,因此您不必手动执行此操作。 @Projection 注释是一个特定于 spring-data 的注释,它允许自定义实体的公开方式。有一种更通用的方法可以在 Json 对象上使用视图,那就是 Jackson 的 @JsonViewstackoverflow.com/a/30307335/995891 - 这就是您所追求的吗? Wrt,重新路由,你可以@Autowire另一个控制器并调用java方法。
  • @zapl 我的目标是公开包含自定义代码的 RESTful 端点,但使用 Spring Data 中实现的投影概念。我想公开一个实体的几个“版本”,但要控制端点和数据库之间发生的事情。我想通过相同的 URL 公开实体的这些不同投影,具体取决于包含所需投影的请求参数。 @JsonView 可能很有趣:我会调查一下,谢谢。虽然它可能不是我所需要的。
  • 我刚刚编辑了我的问题以添加有关我期望的结果的详细信息。

标签: java spring rest spring-boot spring-data-rest


【解决方案1】:

此答案提供了有关如何创建实体的投影实例的一些详细信息 - https://stackoverflow.com/a/29386907/5371736

因此,根据您的投影参数,您可以生成给定的投影。

希望这是您正在寻找的。​​p>

【讨论】:

  • 不是我真正想要的,但 thnaks。据我了解,这是基于 Page 类提供的方法,我目前不使用该方法。但如果我找不到其他解决方案,这可能是一种解决方法。
猜你喜欢
  • 2016-01-15
  • 2017-07-27
  • 2018-04-18
  • 2016-01-20
  • 1970-01-01
  • 2018-03-05
  • 2015-05-01
  • 2019-01-27
  • 1970-01-01
相关资源
最近更新 更多