SpringBoot整合Scala构建Web服务的方法

网友投稿 298 2023-01-12


SpringBoot整合Scala构建Web服务的方法

今天我们尝试Spring Boot整合Scala,并决定建立一个非常简单的Spring Boot微服务,使用Scala作为编程语言进行编码构建。

创建项目

初始化项目

复制代码 代码如下:

mvn archetype:generate -DgroupId=com.edurt.ssi -DartifactId=springboot-scala-integration -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=1.0.0 -DinteractiveMode=false

修改pom.xml增加java和scala的支持

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

4.0.0

com.edurt.ssi

springboot-scala-integration

jar

1.0.0

springboot-scala-integration

SpringBoot Scala Integration is a open source springboot, scala integration example.

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

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

4.0.0

com.edurt.ssi

springboot-scala-integration

jar

1.0.0

springboot-scala-integration

SpringBoot Scala Integration is a open source springboot, scala integration example.

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

一个简单的应用类

package com.edurt.ssi

import org.springframework.boot.SpringApplication

import org.springframework.boot.autoconfigure.SpringBootApplication

@SpringBootApplication

class SpringBootScalaIntegration

object SpringBootScalaIntegration extends App{

SpringApplication.run(classOf[SpringBootScalaIntegration])

}

添加Rest API接口功能

创建一个HelloController Rest API接口,我们只提供一个简单的get请求获取hello,scala输出信息

package com.edurt.ssi.controller

import org.springframework.web.bind.annotation.{GetMapping, RestController}

@RestController

class HelloController {

@GetMapping(value = Array("hello"))

def hello(): 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的页面文件

创建页面转换器HelloView

package com.edurt.ssi.view

import org.springframework.stereotype.Controller

import org.springframework.web.bind.annotation.GetMapping

@Controller

class HelloView {

@GetMapping(value = Array("hello_view"))

def helloView: 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实体

package com.edurt.ssi.model

import javax.persistence.{Entity, GeneratedValue, Id}

@Entity

class UserModel {

@Id

@GeneratedValue

var id: Long = 0

var name: String = null

}

创建UserSupport dao数据库操作工具类

package com.edurt.ssi.support

import com.edurt.ssi.model.UserModel

import org.springframework.data.repository.PagingAndSortNnqvringRepository

trait UserSupport extends PagingAndSortingRepository[UserModel, Long] {

}

创建UserService服务类

package com.edurt.ssi.service

import com.edurt.ssi.model.UserModel

trait UserService {

/**

* save model to db

*/

def save(model: UserModel): UserModel;

}

创建UserServiceImpl实现类

package com.edurt.ssi.service

import com.edurt.ssi.model.UserModel

import com.edurt.ssi.support.UserSupport

import org.springframework.beans.factory.annotation.Autowired

import org.springframework.stereotype.Service

@Service(value = "userService")

class UserServiceImpl @Autowired() (

val userSupport: UserSupport

) extends UserService {

/**

* save model to db

*/

override def save(model: UserModel): UserModel = {

return this.userSupport.save(model)

}

}

创建用户UserController进行持久化数据

package com.edurt.ssi.controller

import com.edurt.ssi.model.UserModel

import com.edurt.ssi.service.UserService

import org.springframework.beans.factory.annotation.Autowired

import org.springframework.web.bind.annotation.{PathVariable, PostMapping, RequestMapping, RestController}

@RestController

@RequestMapping(value = Array("user"))

class UserController @Autowired()(

val userService: UserService

) {

@PostMapping(value = Array("save/{name}"))

def save(@PathVariable name: String): Long = {

val userModel = {

new UserModel()

}

userModel.name = name

return this.userService.save(userModel).id

}

}

使用控制台窗口执行以下命令保存数据

curl -X POST http://localhost:8080/user/save/qianmoQ

收到返回结果

1

表示数据保存成功

增加数据读取渲染功能

修改UserService增加以下代码

/**

* get all model

*/

def getAll(page: Pageable): Page[UserModel]

修改UserServiceImpl增加以下代码

/**

* get all model

*/

override def getAll(page: Pageable): Page[UserModel] = {

return this.userSupport.findAll(page)

}

修改UserController增加以下代码

@GetMapping(value = Array("list"))

def get(): Page[UserModel] = this.userService.getAll(PageRequest.of(0, 10))

创建UserView文件渲染User数据

package com.edurt.ssi.view

import com.edurt.ssi.service.UserService

import org.springframework.beans.factory.annotation.Autowired

import org.springframework.data.domain.PageRequest

import org.springframework.stereotype.Controller

import org.springframework.ui.Model

import org.springframework.web.bind.annotation.GetMapping

@Controller

class UserView @Autowired()(

private val userService: UserService

) {

@GetMapping(value = Array("user_view"))

def helloView(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功能

package com.edurt.ssi

import com.edurt.ssi.service.UserService

import org.junit.jupiter.api.Test

import org.springframework.beans.factory.annotation.Autowired

import org.springframework.boot.test.context.SpringBootTest

import org.springframework.data.domain.PageRequest

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

class UserServiceTest @Autowired()(

private val userService: UserService) {

@Test

def `get all`() {

println(">> Assert blog page title, content and status code")

val entity = this.userService.getAll(PageRequest.of(0, 1))

print(entity.getTotalPages)

}

}

源码地址:github


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微服务网关实现的功能(微服务架构中服务网关的作用)
下一篇:微服务网关实现(net微服务网关)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~