美文网首页
Spring Boot-第一个RESTful项目

Spring Boot-第一个RESTful项目

作者: biloba | 来源:发表于2018-05-29 15:33 被阅读95次

    春招及春招后的这一段时间都比较懒,好久没写博客记录了。
    这次呢,主要介绍下Spring Boot框架的使用,本来之前用过spring, spring-mvc后繁杂的配置及困难的配置出错排查让我对java web丧失了兴趣,不过后来看了下spring boot又看到了希望,极少的配置能把精力放到业务逻辑实现上。
    废话不多说,快来看看吧。

    Spring Boot简介及特点

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是
    用来简化新Spring应用的初始搭建以及开发过程。

    它具有以下特点:

    • 为基于Spring的开发提供更快的入门体验
    • 开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求。
    • 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。
    • Spring Boot并不是不对Spring功能上的增强,而是提供了一种快速使用Spring的方式。

    新建项目

    开发工具使用IntelliJ IDEA专业版
    项目类型选择Spring Initializr,初始服务连接默认就行

    填写项目信息,packaging是打包类型,有jar和war两种,可以直接把整个项目打包成一个jar包,直接用jar包部署

    这一步可以直接选择各种依赖,这里选一个web构建restful web服务

    项目结构

    先来看下项目的主要结构,各个文件的作用

    程序入口

    src/main/java下的程序入口:HelloSpringBootApplication
    该类由@SpringBootApplication修饰,功能是@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解结合。

    其中@EnableAutoConfiguration作用:Spring Boot会自动根据你jar包的依赖来自动配置项目,因此建议只有一个带有该注解的类。

    启动项目
    启动Spring Boot项目最简单的方法就是执行下面的方法:

    SpringApplication.run(Application.class, args);
    

    该方法返回一个ApplicationContext对象,使用注解的时候返回的具体类型是AnnotationConfigApplicationContext或AnnotationConfigEmbeddedWebApplicationContext,当支持web的时候是第二个。

    除了上面这种方法外,还可以用下面的方法:

    SpringApplication application = new SpringApplication(Application.class);
    application.run(args);
    

    SpringApplication包含了一些其他可以配置的方法,如果你想做一些配置,可以用这种方式。

    除了上面这种直接的方法外,还可以使用SpringApplicationBuilder:

    new SpringApplicationBuilder()
            .showBanner(false)
            .sources(Application.class)
            .run(args);
    

    当使用SpringMVC的时候由于需要使用子容器,就需要用到SpringApplicationBuilder,该类有一个child(xxx...)方法可以添加子容器。

    pom.xml

    项目的依赖库及插件等信息

    1. 父pom
    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.2.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    

    父pom比较简单,而且spring-boot-starter-parent包含了大量配置好的依赖管理,在自己项目添加这些依赖的时候不需要写<version>版本号。

    1. Web模块
    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    

    spring-boot-starter-test:测试模块,包括JUnit、Hamcrest、Mockito

    1. spring-boot-maven-plugin插件
    <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
    

    该插件支持多种功能,常用的有两种,第一种是打包项目为可执行的jar包。
    在项目根目录下执行mvn package将会生成一个可执行的jar包,jar包中包含了所有依赖的jar包,只需要这一个jar包就可以运行程序,使用起来很方便

    其他

    • src/main/resources下的配置文件:application.properties
      以后Spring boot的主要配置就写在这里面
    • src/test/下的测试入口:Chapter1ApplicationTests
    • resources下:static放静态资源,templates放模板页面

    实现RESTful接口

    效果

    当我们get请求

    http://localhost:8080/greeting
    

    返回json格式的回应

    {"id":1,"content":"Hello, World!"}
    

    也可以请求时传入name参数

    http://localhost:8080/greeting?name=User
    

    返回

    {"id":1,"content":"Hello, User!"}
    

    coding

    1. 首先添加相应的bean
    public class Greeting {
    
        private final long id;
        private final String content;
    
        public Greeting(long id, String content) {
            this.id = id;
            this.content = content;
        }
    
        public long getId() {
            return id;
        }
    
        public String getContent() {
            return content;
        }
    }
    
    1. 添加Controller
      添加相应的Controller相应请求
    @RestController
    public class GreetingController {
    
        private static final String template = "Hello, %s!";
        private final AtomicLong counter = new AtomicLong();
    
        @RequestMapping("/greeting")
        public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
            return new Greeting(counter.incrementAndGet(),
                                String.format(template, name));
        }
    }
    

    AtomicLong 是原子类,来产生递增的id值,同时保证并发时数据的准确性。
    greeting方法的请求地址映射为http://localhost:8080/greeting,同时用@RequestParam接收请求参数,默认值为World,方法内直接返回一个Greeting对象,它将自动转换为json,因为spring boot已经内置了相关json转化依赖

    同时@RestController是@Controller 和 @ResponseBody结合

    可以看到实现时我们没写一句配置,解放劳动力啊!

    (使用mybatis实现较复杂的RESTful项目,可以看我这个项目,就不写了... https://github.com/biloba123/Reptile

    相关文章

      网友评论

          本文标题:Spring Boot-第一个RESTful项目

          本文链接:https://www.haomeiwen.com/subject/wgqmjftx.html