spring-boot学习:二、创建一个restful web service

刚开始学习,不知道如何入手,可以根据官方提供的demo进行学习。如:
https://spring.io/guides/gs/rest-service/ ,可下载源码查看,有一个大致的了解。
在这里插入图片描述
环境准备:
JDK1.8及以上、Maven3.2+

对于编辑器,推荐使用IntelliJ IDEA,创建工程时有引导,可选择需要的spring组件,包括spring web、spring cloud xxx等等,直接生成对应的pom.xml文件,很方便。当然eclipse也很好,用了eclipse很多年,用IDEA真的很不习惯。不过IDEA创建工程的引导真的很棒,如下图创建完工程就可以直接运行了。
在这里插入图片描述

由于是学习,我们还是一步步来操作。

1. 创建一个maven工程,pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.kevin</groupId>
    <artifactId>spring-boot-study</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-study</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <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>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

可以看出依赖比以往的spring工程简单了很多,我们来看看spring-boot-starter-web到底是什么?
在这里插入图片描述
从上图看到spring-web、spring-mvc、spring-beans…是不是很熟悉、很亲切,是不是就是我们传统spring web工程的依赖包。这说明spring-boot-starter-xxx会对需要的依赖包进行封装,引入它就会自动引入需要的依赖包,而且不用再考虑版本冲突的,jar包丢失或者重复的问题,这就是spring-boot的精髓之一。

另外我们可以从上图中发一个依赖spring-boot-starter-tomcat,这就是spring-boot内置的tomcat,不需要我们再去下载和配置tomcat,这也是spring-boot的精髓之一。

2. 编写启动类 SpringBootStudyApplication.java,类名自定义,但是必须放在最根目录。

package com.kevin.springbootstudy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootStudyApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootStudyApplication.class, args);
    }

}

就是一个main方法,使用SpringApplication.run()启动应用(依次启动spring组件和tomcat)。关键是注解@SpringBootApplication,看看@SpringBootApplication做了哪些事情:
在这里插入图片描述
@SpringBootConfiguration定义当前类为配置类,
@EnableAutoConfiguration自动加载配置,
@ComonentScan 扫描该类所在的包下所有需要管理的类,相当于之前的 <context:component-scan>,这也是为什么启动类需要放在根目录的原因。

也可以给@SpringBootApplication指定属性,如exclude(哪些包不需要扫描)、scanBasePackages(指定扫描包)

3. 直接运行启动类(SpringBootStudyApplication.java),可以看到直接启动了一个tomcat,端口默认8080,最前面还有一个banner信息(后面讲如何自定义)
在这里插入图片描述
4. 创建Greeting,定义基础属性和构造方法,注意这里用final,赋值后不能修改

package com.kevin.springbootstudy.model;

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;
    }
}

5. 创建HelloController.java,提供api
counter使用的并发包,数量递增,不存在并发问题
注解@RestController是由@Controller @ResponseBody(将结果以字符串形式返回)组合而成

package com.kevin.springbootstudy.controller;

import com.kevin.springbootstudy.model.Greeting;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;

@Controller
public class HelloController {

    private final static String template = "Hello, %s!";

    private final AtomicLong counter = new AtomicLong();

    @RequestMapping("/hello")
    public Greeting hello(@RequestParam(value = "name", defaultValue = "World") String name){
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }

}

6. 启动服务(SpringBootStudyApplication.java)进行测试
访问http://127.0.0.1:8080/hello,返回:{"id":1,"content":"Hello, World!"}
访问http://127.0.0.1:8080/hello?name=Kevin,返回:{"id":2,"content":"Hello, Kevin!"}

7. 编写测试类

使用MockMvc模拟网络请求,分别写两个测试方法,一个不带参数,一个带参数,匹配返回的结果是否达到预期
jsonPath(expression) 将返回的结果按表达式进行匹配
jsonPath("$.content") 返回的结果从头开始,获取属性为content的数据

测试需要用到MockMvcRequestBuilders 的一些静态方法,可直接引入是代码更简洁

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

package com.kevin.springbootstudy;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class HelloControllerTests {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void noParamTest() throws Exception{
        this.mockMvc.perform(get("/hello")).andDo(print()).andExpect(status().isOk()).andExpect(jsonPath("$.content").value("Hello, World!"));
    }

    @Test
    public void paramTest() throws Exception{
        this.mockMvc.perform(get("/hello").param("name", "Kevin")).andDo(print()).andExpect(status().isOk()).andExpect(jsonPath("$.content").value("Hello, Kevin!"));
    }
}

在这里插入图片描述

测试都正常,可以发现搭建一个简单的能够提供api访问的工程,使用spring boot明显快速简便很多,真正的是开箱即用。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot是一种基于Java的快速应用程序开发框架,旨在简化新Spring应用程序的创建和部署。它提供了自动配置、开箱即用的功能和简单的Maven配置,使您能够使用Spring框架来开发Web应用程序。 要使用Spring Boot开发Web应用程序,首先需要在pom.xml文件中添加spring-boot-starter-web依赖: ``` <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> ``` 然后,您可以创建一个Spring控制器来处理Web请求。例如,以下是一个简单的控制器,它响应'/hello'路径的GET请求: ``` @RestController public class HelloController { @GetMapping("/hello") public String sayHello() { return "Hello, Spring Boot!"; } } ``` 最后,您可以使用Spring Boot提供的内置Tomcat服务器在本地运行应用程序。只需在应用程序的main方法中添加@SpringBootApplication注解并调用SpringApplication.run方法即可启动应用程序: ``` @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } ``` 这就是使用Spring Boot开发Web应用程序的基本流程。希望这些信息对您有帮助。 ### 回答2: Spring Boot 是一个开源的Java开发框架,它可以帮助开发者快速构建基于Spring框架的应用程序。用Spring Boot来开发Web应用非常方便。 首先,Spring Boot提供了自动配置功能,简化了应用程序的配置过程。通过使用注解和约定,Spring Boot能够自动配置应用程序所需的各种组件和依赖项,例如数据库连接、Web服务器等。这样开发人员不需要手动编写大量的配置代码,提高了开发效率。 其次,Spring Boot具有内嵌的Web服务器(如Tomcat、Jetty等)和Servlet容器。这意味着开发者无需部署额外的Web服务器,只需打包应用程序为可执行的JAR文件,即可直接运行。这样可以减少运维工作和服务器资源的消耗。 另外,Spring Boot还提供了丰富的开发工具和插件,如Spring Boot DevTools和Spring Boot Actuator等。这些工具可以帮助开发人员快速开发和调试应用程序,还可以监控和管理应用程序的各种指标和状态。 除此之外,Spring Boot还支持使用Spring MVC快速构建RESTful API,同时也能与其他框架如Thymeleaf、Freemarker、Velocity等进行无缝集成,方便实现前后端分离的开发模式。 总之,Spring Boot是一个强大而简化的开发框架,它使得Spring应用程序的开发更加快速、高效。无论是开发小型项目还是大型复杂项目,都可以选择使用Spring Boot来开发Web应用。 ### 回答3: Spring Boot是一个用于简化Spring应用程序开发的框架。它提供了一个快速开发的环境,并且具有自动化的配置,减少了开发人员的工作量。在使用Spring Boot开发Web应用程序时,可以遵循以下步骤: 1. 配置pom.xml:在项目的pom.xml文件中,添加Spring Boot相关的依赖项。通常包括Spring Web、Spring Data JPA、Spring Security等。 2. 创建Controller:使用注解方式创建Controller类,处理来自客户端的请求。通过@RestController注解,可以将Controller类中的处理方法的返回值直接作为响应体返回给客户端。 3. 创建Service:在Service类中,编写业务逻辑代码。可以使用注解@Service将类标记为Service组件,并且使用@Autowired注解注入其他的依赖。 4. 创建Repository:在Repository类中,编写数据库操作的代码。可以使用注解@Repository将类标记为Repository组件,并且使用Spring Data JPA提供的接口来实现对数据库的操作。 5. 定义实体类:根据业务需求,定义与数据库表对应的实体类。实体类中使用注解@Entity标记类为实体类,并且使用注解@Id标记主键字段。 6. 配置数据库连接:在application.properties文件中,配置数据库连接信息,包括数据库URL、用户名、密码等。 7. 运行应用程序:通过main方法启动Spring Boot应用程序。Spring Boot会自动创建并配置好相应的运行环境,并且根据配置的端口号监听客户端的请求。 8. 测试应用程序:使用工具如Postman发送HTTP请求,测试Controller中定义的接口。可以通过URL访问接口,并且根据请求的参数和响应的结果,验证应用程序的正确性。 通过上述步骤,使用Spring Boot开发Web应用程序能够快速简便地搭建一个可靠的系统。同时,Spring Boot还提供了自动化的配置和部署功能,让开发人员能够专注于业务逻辑的开发,而不需要关心复杂的配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值