SpringBoot整合Scala构建Web服务的方法
今天我们尝试SpringBoot整合Scala,并决定建立一个非常简单的SpringBoot微服务,使用Scala作为编程语言进行编码构建。
创建项目
初始化项目
mvnarchetype:generate-DgroupId=com.edurt.ssi-DartifactId=springboot-scala-integration-DarchetypeArtifactId=maven-archetype-quickstart-Dversion=1.0.0-DinteractiveMode=false
修改pom.xml增加java和scala的支持
4.0.0 com.edurt.ssi springboot-scala-integration jar 1.0.0 springboot-scala-integration SpringBootScalaIntegrationisaopensourcespringboot,scalaintegrationexample. org.springframework.boot spring-boot-starter-parent 2.1.3.RELEASE UTF-8 UTF-8 1.8 1.8 1.8 2.12.1 3.1.3 org.scala-lang scala-library ${dependency.scala.version} org.springframework.boot spring-boot-starter-web ${project.basedir}/src/main/scala ${project.basedir}/src/test/scala net.alchim31.maven scala-maven-plugin ${plugin.maven.scala.version} compile testCompile org.springframework.boot spring-boot-maven-plugin
一个简单的应用类
packagecom.edurt.ssi importorg.springframework.boot.SpringApplication importorg.springframework.boot.autoconfigure.SpringBootApplication @SpringBootApplication classSpringBootScalaIntegration objectSpringBootScalaIntegrationextendsApp{ SpringApplication.run(classOf[SpringBootScalaIntegration]) }
添加RestAPI接口功能
创建一个HelloControllerRestAPI接口,我们只提供一个简单的get请求获取hello,scala输出信息
packagecom.edurt.ssi.controller importorg.springframework.web.bind.annotation.{GetMapping,RestController} @RestController classHelloController{ @GetMapping(value=Array("hello")) defhello():String={ return"hello,scala" } }
修改SpringBootScalaIntegration文件增加以下设置扫描路径
@ComponentScan(value=Array( "com.edurt.ssi.controller" ))
添加页面功能
修改pom.xml文件增加以下页面依赖
org.springframework.boot spring-boot-starter-mustache
修改SpringBootScalaIntegration文件增加以下设置扫描路径ComponentScan的value字段中
"com.edurt.ssi.view"
在src/main/resources路径下创建templates文件夹
在templates文件夹下创建一个名为hello.mustache的页面文件
Hello,Scala
创建页面转换器HelloView
packagecom.edurt.ssi.view importorg.springframework.stereotype.Controller importorg.springframework.web.bind.annotation.GetMapping @Controller classHelloView{ @GetMapping(value=Array("hello_view")) defhelloView:String={ return"hello"; } }
浏览器访问http://localhost:8080/hello_view即可看到页面内容
添加数据持久化功能
修改pom.xml文件增加以下依赖(由于测试功能我们使用h2内存数据库)
org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 runtime
修改SpringBootScalaIntegration文件增加以下设置扫描model路径
@EntityScan(value=Array( "com.edurt.ssi.model" ))
创建User实体
packagecom.edurt.ssi.model importjavax.persistence.{Entity,GeneratedValue,Id} @Entity classUserModel{ @Id @GeneratedValue varid:Long=0 varname:String=null }
创建UserSupportdao数据库操作工具类
packagecom.edurt.ssi.support importcom.edurt.ssi.model.UserModel importorg.springframework.data.repository.PagingAndSortingRepository traitUserSupportextendsPagingAndSortingRepository[UserModel,Long]{ }
创建UserService服务类
packagecom.edurt.ssi.service importcom.edurt.ssi.model.UserModel traitUserService{ /** *savemodeltodb */ defsave(model:UserModel):UserModel; }
创建UserServiceImpl实现类
packagecom.edurt.ssi.service importcom.edurt.ssi.model.UserModel importcom.edurt.ssi.support.UserSupport importorg.springframework.beans.factory.annotation.Autowired importorg.springframework.stereotype.Service @Service(value="userService") classUserServiceImpl@Autowired()( valuserSupport:UserSupport )extendsUserService{ /** *savemodeltodb */ overridedefsave(model:UserModel):UserModel={ returnthis.userSupport.save(model) } }
创建用户UserController进行持久化数据
packagecom.edurt.ssi.controller importcom.edurt.ssi.model.UserModel importcom.edurt.ssi.service.UserService importorg.springframework.beans.factory.annotation.Autowired importorg.springframework.web.bind.annotation.{PathVariable,PostMapping,RequestMapping,RestController} @RestController @RequestMapping(value=Array("user")) classUserController@Autowired()( valuserService:UserService ){ @PostMapping(value=Array("save/{name}")) defsave(@PathVariablename:String):Long={ valuserModel={ newUserModel() } userModel.name=name returnthis.userService.save(userModel).id } }
使用控制台窗口执行以下命令保存数据
curl-XPOSThttp://localhost:8080/user/save/qianmoQ
收到返回结果
1
表示数据保存成功
增加数据读取渲染功能
修改UserService增加以下代码
/** *getallmodel */ defgetAll(page:Pageable):Page[UserModel]
修改UserServiceImpl增加以下代码
/** *getallmodel */ overridedefgetAll(page:Pageable):Page[UserModel]={ returnthis.userSupport.findAll(page) }
修改UserController增加以下代码
@GetMapping(value=Array("list")) defget():Page[UserModel]=this.userService.getAll(PageRequest.of(0,10))
创建UserView文件渲染User数据
packagecom.edurt.ssi.view importcom.edurt.ssi.service.UserService importorg.springframework.beans.factory.annotation.Autowired importorg.springframework.data.domain.PageRequest importorg.springframework.stereotype.Controller importorg.springframework.ui.Model importorg.springframework.web.bind.annotation.GetMapping @Controller classUserView@Autowired()( privatevaluserService:UserService ){ @GetMapping(value=Array("user_view")) defhelloView(model:Model):String={ model.addAttribute("users",this.userService.getAll(PageRequest.of(0,10))) return"user" } }
创建user.mustache文件渲染数据(自行解析返回数据即可)
{{users}}
浏览器访问http://localhost:8080/user_view即可看到页面内容
增加单元功能
修改pom.xml文件增加以下依赖
org.springframework.boot spring-boot-starter-test test junit junit org.mockito mockito-core org.junit.jupiter junit-jupiter-engine test
创建UserServiceTest文件进行测试UserService功能
packagecom.edurt.ssi importcom.edurt.ssi.service.UserService importorg.junit.jupiter.api.Test importorg.springframework.beans.factory.annotation.Autowired importorg.springframework.boot.test.context.SpringBootTest importorg.springframework.data.domain.PageRequest @SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT) classUserServiceTest@Autowired()( privatevaluserService:UserService){ @Test def`getall`(){ println(">>Assertblogpagetitle,contentandstatuscode") valentity=this.userService.getAll(PageRequest.of(0,1)) print(entity.getTotalPages) } }
源码地址:GitHub
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。