使用springboot快速创建restful API详细流程,带有可能出现的404错误的解决方法。

阅读: 评论:0

使用springboot快速创建restful API详细流程,带有可能出现的404错误的解决方法。

使用springboot快速创建restful API详细流程,带有可能出现的404错误的解决方法。

主要是为了学习目的,将使用springboot来创建restful的API过程进行一下记录,一是熟练,二是方便一些内容以后复制粘贴。

文章目录

  • 创建springboot项目
  • 设置数据源datasource
  • 创建DAO层代码
    • 拷贝mysql连接器jar包到本地目录
    • 创建l
    • 添加l文件内容
    • 在l中添加mybatis generator插件
    • 运行mybatis generator
    • 给DAO(LoseMapper)添加注解
  • 创建Service接口和实现类
    • 创建LoseService接口
    • 创建LoseServiceImpl实现类
  • 创建控制层LoseController
  • 测试
    • 构建项目
    • 启动引导类
    • 打开浏览器测试

创建springboot项目

首先使用springboot项目向导创建springboot项目

依次选择依赖项

设置数据源datasource

因为添加了以上mybatis依赖,需要配置数据源。
我使用mysql创建了一个lose数据库
修改application.properties文件

spring.datasource.driver-class-name&#sql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/lose?serverTimezone=Asia/Chongqing&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
spring.datasource.username=root
spring.datasource.password=123456

注意:这里使用的是驱动,所以,其url内容也会要求更多。主要是对于时区以及编码的相关参数。

这时可以尝试运行spring应用上下文的引导类,这里类名为SpringdemoApplication

在控制台上显示运行日志,发现springboot自带的Tomcat服务启动成功

这里web服务默认端口号是8080,上下文路径(web应用名称)没有。如果需要,可以在application.properties文件中修改,例如端口号设置为8081,web应用名称为lose

server.port=8081
t-path=/lose

再次启动引导类

创建DAO层代码

可以直接使用Mybatis Generator来自动生成实体类,Dao接口(客户类),映射文件l文件。

拷贝mysql连接器jar包到本地目录

Mybatis Generator插件的工作原理是连接mysql数据库,然后扫描相关表的信息,然后按这些信息来自动创建相关文件。所以,需要连接mysql数据库的jar包。
这里我们拷贝到G盘tools目录下:G:toolsmysql-connector-java-8.0.27.jar

这个文件一般可以在maven依赖的本地仓库中查找到。也可以直接指定目录为本地仓库中的jar包。

创建l

这个文件是Mybatis Generator插件需要的用于自动生成的配置文件。可以放置在任意目录。

我们在resources目录下创建一个mybatis-generator目录,并在该目录下创建文件。

添加l文件内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis//DTD MyBatis Generator Configuration 1.0//EN"".dtd"><generatorConfiguration><!--配置要链接的数据库的数据源--><classPathEntry location="G:toolsmysql-connector-java-8.0.27.jar"/><!---Mybatis上下文--><context id="MySqlContext" targetRuntime="MyBatis3"><!--配置数据库的链接信息--><jdbcConnection driverClass=&#sql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/lose?serverTimezone=Asia/Chongqing&amp;useUnicode=true&amp;characterEncoding=utf8&amp;characterSetResults=utf8"userId="root"password="123456"/><!--数据库BigDecimals字段在java中定义--><javaTypeResolver><property name="forceBigDecimals" value="false"/></javaTypeResolver><!--实体类生成信息--><javaModelGenerator targetPackage="com.javaman.lose.domain" targetProject="src/main/java"><property name="enableSubPackages" value="true"/><property name="trimStrings" value="true"/></javaModelGenerator><!--mybatis 的xml文件地址--><sqlMapGenerator targetPackage="com.javaman.lose.mapper" targetProject="src/main/resources"><property name="enableSubPackages" value="true"/></sqlMapGenerator><!--mybatis的mapper接口--><javaClientGenerator targetPackage="com.javaman.lose.dao" targetProject="src/main/java" type="XMLMAPPER"><property name="enableSubPackages" value="true"/></javaClientGenerator><!--要生成的表结构--><table tableName="lose"enableCountByExample="false" enableUpdateByExample="false"enableDeleteByExample="false" enableSelectByExample="false"selectByExampleQueryId="false"></table></context></generatorConfiguration>

**注意:**其中jdbcConnection中的信息与application.properties中的datasource信息相同。但是在设置 url字符串时,在xml文件中字符串内要将&符号替换成为&amp;

在这里可以自己配置实体类,DAO接口还有XML映射文件的包名以及保存路径。为了让src/main/java目录下只有java代码,所以,将xml映射文件保存到了resources目录中。这样设置,就需要在后面进行两个设置:

  1. 在l文件中添加resources标签来包含该目录下的xml文件,保证在编译项目时,会自动将该目录下的xml文件也会拷贝到项目target目录下。
    <build>标签下添加以下代码
        <resources><resource><directory>src/main/resources</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes></resource></resources>
  1. application.properties要设置映射文件所在目录的位置,不然,spring无法知道这些mapper映射文件在什么地方。

因为在中设置的映射xml文件保存目录以及包名为:

而大家知道src/main/resources目录在编译时,下面的文件和目录会被拷贝到target/classes目录下。也就是类的根路径下。

所以,这里设置的包名,也就是说,最终xml文件会被拷贝到src/main/resources目录下的与包结构相对应的目录结构下面。在编译时,也会被拷贝到类路径下的与包结构相对应的目录下。
所以,我们在application.properties文件中这样来指定映射文件的位置

mybatis.mapper-locations=classpath:com/javaman/lose/mapper/*.xml

在l中添加mybatis generator插件

修改l文件,在<plugins>标签中添加以下插件标签

<plugin><groupId&ator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.3</version><configuration><configurationFile>src/main/resources/l</configurationFile><verbose>true</verbose><overwrite>true</overwrite></configuration><executions><execution><id>Generate MyBatis Artifacts</id><goals><goal>generate</goal></goals></execution></executions><dependencies><dependency><groupId&ator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.3</version></dependency></dependencies></plugin>

**注意:**在修改插件或依赖后,需要重新加载maven。保证依赖下载成功。

大家要注意其中的

<configurationFile>src/main/resources/l</configurationFile>

这一句中是指定文件的位置的。这个文件前面创建过。

运行mybatis generator

如果maven依赖下载完成,就可以直接双击maven中插件下的mybatis-generator插件的generate开始生成。

如果运行日志容器中显示BUILD SUCCESS,说明创建成功

查看项目目录

**注意:**这里DAO接口名称不是叫LoseDAO,而是叫LoseMapper
我们会发现,其xml映射文件被创建在resources目录下了。

我们可以尝试编译项目,看最终编译目录中,是否有xml文件也被拷贝成功。

我们先使用maven的clean,将以前的编译清除掉。然后使用complile编译。

我们有时候会发现,xml文件并没有被拷贝到编译目录中。
我们可以依次使用菜单"构建-构建项目“

这时往往能解决问题

我们发现,这三个文件都被拷贝到了target目录中。

给DAO(LoseMapper)添加注解

现在需要让spring来自动生成LoseMapper接口的实现类,并创建其对象,所以,需要添加注解。有两个方法,一是在每个DAO接口前添加@Mapper注解,如:

@Mapper
public interface LoseMapper {
}

但这种方法需要为每一个DAO接口都添加该注解,有点麻烦。
可以直接在引导类上添加@MapperScan注解,声明扫描器,如:

@SpringBootApplication
@MapperScan(basePackages = "com.javaman.dao")
public class SpringdemoApplication {public static void main(String[] args) {SpringApplication.run(SpringdemoApplication.class, args);}}

其中指定basePackages属性,值为要扫描的DAO接口类定义的包的名称。如果在不同的包中,可以使用字符串数组来定义位置。

创建Service接口和实现类

下面依次在com.javaman.lose包下,创建service包,并在其下创建impl包。

创建LoseService接口

com.javaman.lose.service包下创建LoseService接口,代码如下:

public interface LoseService {Lose getLoseById(long id);    
}

这里暂只定义一个方法,就是通过id来获取失物(Lose)信息。返回的Lose实体类对象。

创建LoseServiceImpl实现类

com.javaman.lose.service.impl包下创建LoseServiceImpl实现类,代码如下:

@Service
public class LoseServiceImpl implements LoseService {@Resourceprivate LoseMapper loseDao;@Overridepublic Lose getLoseById(long id) {return loseDao.selectByPrimaryKey(id);}
}

注意:为实现类添加@Service注解,让spring自动创建该对象并管理这个对象
在Service层会使用Dao层的实现类对象。这里采用添加@Resouce注解来为属性实现自动注入,即spring会自动为loseDao这个属性变量赋值。这样,我们可以在getLoseById方法中直接使用该对象。

创建控制层LoseController

我们在com.ller包下,创建LoseController控制类。代码如下:

@RestController
public class LoseController {@Resourceprivate LoseService loseService;@RequestMapping("/lose/{id}")@GetMappingpublic Lose getLoseById(@PathVariable long id){LoseById(id);}
}

说明:

  • 使用@RestController注解,让spring来创建LoseController控制层对象,这个注解包含了@ResponseBody注解,所以,可以让下面的处理器方法返回类对象时,会以JSON格式返回。
  • 使用@Resource注解来给属性自动注入赋值。
  • 给处理器方法getLoseById添加@RequestMapping("/lose/{id}")注解,可以使用restful风格的HTTP请求。
  • @GetMapping注解,表示该请求是GET类型。这样就更加符合restful规范了。
  • 为了能处理类似/lose/1这样的请求,其中将后面的1传给处理器方法,需要给入口参数添加@PathVariable注解,表示是请求路径为变量。使用占位符来定义路径变量,如果占位符变量名称与入口参数变量名称一样,可以省略注解的属性值设置。

测试

构建项目


可以看到编译目录下target/classes类路径根目录下,需要的文件都在。

启动引导类


启动成功

打开浏览器测试

在地址栏中输入:

localhost:8081/lose/lose/1

第一个lose是web应用名(应用上下文名称)。第二个是请求名。

在测试时,我一开始总出404错。
类似如下图:

后来找了许多,才发现Application引导类一定要在所有controller,dao,service包的上层。不然,不会自动的扫描这些包,也不会为这些类创建对象。

出错时的引导类在springdemo包下面,这个包与controller等包平级,也就是controller类等不在引导类同级或下级目录中。

所以, 要更改成为:

我们也可以在下面的运行窗口中的Actuator中看到Spring是否为我们创建了这些对象。

如果在这里,发现找不到这些对象,那么很有可能是这些类没有定义在引导类同级或下级目录中,不会自动扫描注解,也就不会自动创建这些对象。

本文发布于:2024-01-29 03:54:14,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170647165712508.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23