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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。