经验2:扩展我们的第一个控制器

1.目标

在本课程中,我们将继续之前开始的工作,将简单的控制器实现带到下一个级别。


2.课程教案

当您从本课程开始时,您需要导入的相关模块是:M6-Expanding-Out-First-Controller-start

如果你想看一看完整的经验教训,作为参考,可以自由导入:m6-expanding-our-first-controller-end


2.1。的findOne ()方法

现在我们的网络支持开始塑造,让我们做一些简单的CRUD在我们的应用程序。

我们目前的找一个实现的ProjectController.简单地返回一些随机数据。然而,它应该在做什么使用服务层

所以让我们注射ProjectService通过构造函数:

现在让我们使用它找一个方法。

注意,我们需要id这个项目,因为这就是我们正在搜索的。所以让我们确保在这里的方法中是一个参数。

接下来,我们将简单地委托给服务,提取潜在的值并返回:

参数也需要是映射到A.路径组件,或通过使用的路径变量@PathVariable注释

最后,我们将删除硬编码1”并将其替换为id路径变量。现在找一个方法将:

现在让我们运行应用程序。

我们将打开Postman并从客户端通过调用:http://localhost:8080/projects/1


2.2。误差处理问题

这里有几件事需要解决。W当然,E将专门为改进异常/错误处理提供完整的经验教训,所以我们不会在这里修复这些问题。但至少让我们快速看一下问题是什么。

一个是我们在这里看到了原始异常这显然是不理想的。

第二个问题状态码。逻辑上,我们期望返回404(未找到),因为我们试图访问一个未找到的资源。然而,请注意,我们得到的是一个不正确的500服务器错误。

最后,第三点是,与其主动检查结果,我们允许内部逻辑块抛出异常,即,可选的。它通常更好地控制它。

我们将在单独的,专门的课程中处理所有的问题。


2.3。写操作

到目前为止,我们已经看到了一个读操作。现在让我们来做一个编写操作,因为这将涉及Spring MVC的其他方面。

我们要做一个简单的事情保存:基本上,创建一个新的项目资源。

首先,让我们定义没有映射的基本操作:

接下来,我们将把它映射到一个HTTP POST使用@PostMapping我们还将在此处将HTTP请求的主体映射到项目变量,使用@RequestBody:

我们现在可以切换回客户端并使用项目资源发送我们的POST请求。

请注意:在本课程中,我们还通过更改ID的生成策略更新了实体定义:

这是因为在某些课程中,我们会在启动过程中自动将实体加载到数据库中。在Spring Boot中,这是通过添加data.sql文件在项目的资源。在这些情况下,我们必须改变id生成策略,以便我们的实体能够与自动创建的实体兼容。您可以在参考资料部分找到更多相关信息。


3.资源

-弹簧控制器指南

-Spring Web注解

-使用Spring Boot加载初始数据的快速指南

-Hibernate中标识符概述


LS - M6 - L2.pdf