使用Spring-Boot快速搭建一个后台服务器

使用Spring-Boot快速搭建一个后台服务器,第1张

        在后台业务快速增长的时代,如何快速构建api以及能够以最小的影响去部署服务是设计的一个趋势,SpringBoot就给开发者们这样一种能力。

       个人比较推荐IntelliJ,破解请自行百度。这款ide提供了更加炫酷的界面效果,能够更加方便的去调试管理项目。我是使用mac2019.3.3版本的,ide自带了springboot库。下面我们先使用SpringBoot官网创建一个项目。打开https://start.spring.io网址,选择版本后点击generate按钮生成项目,如下图所示:

SpringBoot有几个常用的注解是开发api常用的。

@RequestMapping用来配置api的路由和方法,@PostMapping表示是Post请求,@RequestBody表示数据存放在body,@RequestParam 标记参数的说明,@ResponseBody表示返回值定义。@Controller标记控制器

示例如下:

package com.instinct.auction.controller.login

import com.instinct.auction.controller.ResultBase

import com.instinct.auction.controller.data.UserManager

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

import org.springframework.stereotype.Controller

import org.springframework.web.bind.annotation.*

import javax.servlet.http.HttpServletRequest

import java.util.Dictionary

@Controller

public class LoginController {

public LoginController(){

userManager=new UserManager()

}

//@Autowired

    private UserManageruserManager

//@Autowired

// private HttpServletRequest request

    @RequestMapping("/api/login")

@ResponseBody

    public ResultBase  LoginIn(LoginInfo loginInfo){

//check memberinfo

        boolean success=userManager.checkMember(loginInfo.Name,loginInfo.Pwd)

String msg=success?"login success":"login error"

ResultBase result=new LoginResult(200,msg)

return  result

}

@RequestMapping("/api/login1")

@ResponseBody

    public ResultBase  LoginIn(@RequestParam(value ="name",required =true) String name,

@RequestParam(value="pwd",required =true) String pwd){

//check memberinfo

        boolean success=userManager.checkMember(name,pwd)

String msg=success?"login success":"login error"

ResultBase result=new LoginResult(200,msg)

return  result

}

@RequestMapping(value ="/api/register",method = RequestMethod.POST)

@ResponseBody

    public ResultBase Register(@RequestBody MemberInfo memberInfo){

//add to review list

//if telephone exist,return

        boolean containsName=userManager.containsName(memberInfo.Name)

if(containsName) {

ResultBase result=new LoginResult(200,"user already exist")

return  result

}

boolean containsTelephone=userManager.containsTelephone(memberInfo.phoneNum)

if(containsTelephone){

ResultBase result=new LoginResult(200,"telephone already exist")

return  result

}

ResultBase result1=new LoginResult(200,"审核中")

return  result1

}

@PostMapping(value ="/api/test")

@ResponseBody

    public String Test(@RequestBody MemberInfo info){

return  info.Name+info.phoneNum

}

}

如上图所示的test路由方法,如果忘记了些ResponseBody注解,则会发生接口已调用,但返回值为404的问题。

Helloworld使用传统的springmvc,需要配置web.xml,applicationContext.xml,然后打包为war在tomcat中运行,而如果使用springboot,一切都变得简单起来了。下面使用Maven来创建springboot的webapp工程pom.xml4.0.0org.springframeworkgs-spring-boot0.1.0org.springframework.bootspring-boot-starter-parent1.3.3.RELEASEorg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-testtest1.8org.springframework.bootspring-boot-maven-pluginHelloControllerpackagehelloimportorg.springframework.web.bind.annotation.RequestMappingimportorg.springframework.web.bind.annotation.RestController@RestControllerpublicclassHelloController{@RequestMapping("/")publicStringindex(){return"GreetingsfromSpringBoot!"}}其中:@RestController表示使用springmvc来接收request请求@RequestMapping映射到主页当请求返回的时候,是纯文本,那是因为@RestController是由@Controller和@ResponseBody组成Application@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){ApplicationContextctx=SpringApplication.run(Application.class,args)System.out.println("Let'sinspectthebeansprovidedbySpringBoot:")}}其中:@SpringBootApplication代表了其有四个注解组成:@Configuration,@EnableAutoConfiguration,@EnableWebMvc,@ComponentScan在SpringApplication.run中会去自动启动tomcatrun方法返回上下文,在这个上下文中可以拿到所有的bean没有一行配置代码、也没有web.xml。基于SpringBoot的应用在大多数情况下都不需要我们去显式地声明各类配置,而是将最常用的默认配置作为约定,在不声明的情况下也能适应大多数的开发场景。总体而言springboot是对javawebapp开发的简化单元测试@RunWith(SpringJUnit4ClassRunner.class)@SpringApplicationConfiguration(classes=MockServletContext.class)@WebAppConfigurationpublicclassHelloControllerTest{privateMockMvcmvc@Beforepublicvoidbefore()throwsException{mvc=MockMvcBuilders.standaloneSetup(newHelloController()).build()}@Afterpublicvoidafter()throwsException{}/****Method:index()**/@TestpublicvoidtestIndex()throwsException{//TODO:Testgoesheremvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(content().string(equalTo("GreetingsfromSpringBoot!")))}}建立restfullweb服务器接上,使用srpingboot建立web服务器就非常简单了,首先建立一个pojo类publicclassGreeting{privatefinallongidprivatefinalStringcontent}然后使用control来handlehttp请求@RestControllerpublicclassGreetingController{privatestaticfinalStringtemplate="Hello,%s!"privatefinalAtomicLongcounter=newAtomicLong()@RequestMapping("/greeting")publicGreetinggreeting(@RequestParam(value="name",defaultValue="World")Stringname){returnnewGreeting(counter.incrementAndGet(),String.format(template,name))}}其中:@RequestParam表明了参数要求,如果要必填则设置required=true返回是一个对象,会被自动转换为json当我们访问:greeting时候返回{"id":1,"content":"Hello,World!"}greeting?name=User时候返回{"id":2,"content":"Hello,User!"}数据库访问另一个非常常用的问题。在传统开发中,我们需要配置:类路径上添加数据访问驱动实例化DataSource对象,指定url,username,password注入JdbcTemplate对象,如果使用Mybatis,还要配置框架信息下面一个例子讲述用用springboot来代替。数据访问层我们将使用SpringDataJPA和Hibernate(JPA的实现之一)。开始之前先介绍两个概念springdata为了简化程序与数据库交互的代码,spring提供了一个现成的dao层框架,spring家族提供的spring-data适用于关系型数据库和nosql数据库;例如SpringDataJPA,SpringDataHadoop,SpringDataMongoDB,SpringDataSolr等;具体的可以参考官网:.mysql.jdbc.Driverspring.datasource.password=xxx#SpecifytheDBMSspring.jpa.database=MYSQL#Showornotlogforeachsqlqueryspring.jpa.show-sql=true#Hibernateddlauto(create,create-drop,update)spring.jpa.hibernate.ddl-auto=update#Namingstrategyspring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy#strippedbeforeaddingthemtotheentitymanager)spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect其中,hibernate的ddl-auto=update配置表名,数据库的表和列会自动创建写下实体类:@Entity@Table(name="student")publicclassStudent{@Id@GeneratedValue(strategy=GenerationType.AUTO)privatelongid@NotNullprivateStringnameprivateStringage}@Entity,说明被这个注解修饰的类应该与一张数据库表相对应,表的名称可以由类名推断,当然了,也可以明确配置,只要加上@Table(name="books")即可。需要特别注意,每个Entity类都应该有一个protected访问级别的无参构造函数,用于给Hibernate提供初始化的入口。@Idand@GeneratedValue:@Id注解修饰的属性应该作为表中的主键处理、@GeneratedValue修饰的属性应该由数据库自动生成,而不需要明确指定。@ManyToOne,@ManyToMany表明具体的数据存放在其他表中,在这个例子里,书和作者是多对一的关系,书和出版社是多对一的关系,因此book表中的author和publisher相当于数据表中的外键;并且在Publisher中通过@OneToMany(mapped="publisher")定义一个反向关联(1——>n),表明book类中的publisher属性与这里的books形成对应关系。@Repository用来表示访问数据库并操作数据的接口,同时它修饰的接口也可以被componentscan机制探测到并注册为bean,这样就可以在其他模块中通过@Autowired织入。dao:@RepositorypublicinterfaceCustomerRepositoryextendsCrudRepository{ListfindByLastName(StringlastName)}详细的可以看springjpa的具体介绍。最后使用:@RestControllerpublicclassDbController{@AutowiredprivateStudentDaodao@RequestMapping("/get-student-counts")@ResponseBodypublicStringgetAllStudents(){Liststudents=(List)dao.findAll()returnString.format("%d",students.size())}}主要一点是:我在CustomerRepository实现中每天添加方法:findByLastName,@Autowired就会一直报错。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/499772.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-16
下一篇2023-06-16

发表评论

登录后才能评论

评论列表(0条)

    保存