当前位置: 首页 > 知识库问答 >
问题:

Spring Data REST:使用服务而不是CrudRepository?

赵君植
2023-03-14

我正在探索Spring数据REST库以构建RESTAPI。

但在许多示例中,我看到RESTAPI是从Crudepository生成的。

我想知道这在生产中是否真的有用?在我看来,快速启动和运行某些东西很容易,但我宁愿将RESTAPI与“真正的”服务相结合,而不是“仅仅”与存储库相结合。

你对此有何看法?

亲切的问候B

共有2个答案

翟京
2023-03-14

您可以添加使用您的服务的自定义控制器。

例如,域预订预订存储库

请注意,如果在控制器上放置@RequestMapping(path=“bookings”),则Spring Data REST提供的所有endpoint都将被覆盖且不可访问。因此,请将@RequestMapping及其变量(如@PutMapping)放在方法上。

如果控制器方法具有@PostMapping(“bookings”),则Spring Data REST提供的POSTendpoint将替换为此自定义控制器方法。

@RepositoryRestController
public class BookingController {

    private final BookingService bookingService;

    @PostMapping("/bookings")
    public ResponseEntity create(@RequestBody Booking booking) {
        ...
    }
}

如果控制器方法具有不同的请求映射路径,则保留Spring Data REST提供的所有endpoint。

@RepositoryRestController
public class BookingController {

    private final BookingService bookingService;

    @PutMapping("/bookings/{id}/confirm")
    public ResponseEntity confirm(@PathVariable String id) {
        ...
    }
}

您可以在Github上找到myBookingController的完整代码

堵恺
2023-03-14

存储库层旨在从数据库中持久化或检索域对象。

服务层应该包含一些在域对象上执行的业务逻辑。

如果您只需要从数据库中获取域对象,那么您实际上并不需要应用程序中的任何服务。这就是为什么许多示例是从CrudRepository生成的——这个接口提供了向/从数据库传输数据的基本功能。

但是如果您需要在简单的数据传输之外的对象上执行一些额外的逻辑,您需要一个单独的服务。

 类似资料:
  • 问题内容: 但是我仍然不知道您何时在工厂使用服务。 据我所知,工厂通常用于创建可被多个控制器调用的“通用”功能:创建通用控制器功能 Angular文档似乎更喜欢工厂而不是服务。他们甚至在使用工厂时也提到“服务”,这更加令人困惑!http://docs.angularjs.org/guide/dev_guide.services.creating_services 那么什么时候可以使用服务呢? 有什

  • 请容忍我在这里。我知道还有其他答案,比如:AngularJS:服务vs提供商vs工厂 然而,我仍然不知道你什么时候会使用工厂服务。 据我所知,factory通常用于创建可由多个控制器调用的“公共”函数:创建公共控制器函数 Angular的医生似乎更喜欢工厂而不是服务。他们甚至在使用工厂时提到“服务”,这更令人困惑!http://docs.angularjs.org/guide/dev_guide.

  • 我正在使用Android GCM,而没有在我的设备上安装Google Play服务?用GCM发送推送通知而不安装Google Play服务的方法是什么?

  • 我已经学习了用于构建REEST服务的Spring.io入门教程https://spring.io/guides/gs/rest-service/。问题是,本教程只解释了如何使用spring Boot生成嵌入tomcat的独立运行jar。 有没有一种方法可以从头开始创建一个项目,生成一个war来部署在一个已经存在的tomcat实例上? 附注:我在stackoverflow上的Tomcat中发现了一个

  • 问题内容: 我有一个使用JDBC(通过JPA)的Java应用程序,它使用主机名,端口和Oracle SID连接到开发数据库,​​如下所示: jdbc:oracle:thin:@ oracle.hostserver1.mydomain.ca:1521:XYZ XYZ是Oracle SID。现在,我需要连接到另一个不使用SID而是使用Oracle“服务名”的Oracle数据库。 我试过了,但是没有用:

  • 在我前面的问题Bluemix中,使用服务器推送应用程序。xml与整个Liberty服务器相比,性能有差异吗?我认为可以用多个Websphere Liberty Profile Server 8.5将单个Websphere Application Server 8替换为多个应用程序,其中每个Websphere Liberty Profile Server将承载一个应用程序。 我对这份声明感到担忧 已