一、创建项目

今天给大家讲一个SpringBoot的一个入门案例,让更多人能用起SpringBoot来。假设项目名为MyProject项目,并添加MyProject-Web的子模块。

二、给根项目MyProject的pom.xml,加入parent节点(spring-boot-starter-parent)

    <!--Add Spring boot Parent-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>

三、为子模块MyProject-Web的pom.xml添加下列依赖

    <dependencies>
<!--SpringBoot核心模块,包括自动配置支持、日志和YAML-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--Web模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--测试模块,包括JUnit、Hamcrest、Mockito-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--加载yml配置文件使用。-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<!--自动Get、Set-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>

四、添加项目包,整理项目结构

说明,子模块的pom中加入的依赖项:spring-boot-starter-test、spring-boot-configuration-processor、lombok不是必需的。因为演示例子中,加入了对yml配置转换为封装实体的样例。所以加入了spring-boot-configuration-processor、lombok。

五、在build包下加入ApplicationServer.java的结构如下:

package com.test.build;

import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.PropertySource; @ComponentScan({"com.test"})
@SpringBootApplication
@PropertySource({"classpath:config/resource.properties"})
public class ApplicationServer {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(ApplicationServer.class);
application.setBannerMode(Banner.Mode.OFF);//关闭启动时的Banner展示
application.run(args); //等价用法
//SpringApplication.run(ApplicationServer.class, args);
}
}

六、在resources/application.yml中结构如下:

server:
address: 0.0.0.0
port: 8080
servlet:
context-path: /app
tomcat:
uri-encoding: utf-8 constant:
company: testttttt
address: 北京市上地九街数码科技广场XXXXXX

七、在resources/config/resource.properties中结构如下:

person.name: Sindrol

八、在constant常量文件夹下ConstantSetting.java中结构如下:

package com.test.constant;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties; @Data
@ConfigurationProperties(prefix = "constant")
public class ConstantSetting {
private String company;
private String address;
}

注意,这里使用的@ConfigurationProperties用来标注一个类,上文中将yml中前缀为constant的值映射到此实体中,它需要spring-boot-configuration-processor包依赖。@Data 是为实体类自动生成get、set。

九、在config夹中ApplicationConfig.java类中,内容如下:

package com.test.config;

import com.test.constant.ConstantSetting;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class ApplicationConfig {
public ApplicationConfig() {
System.out.println("ApplicationConfig inited ...");
} @Bean
public ConstantSetting constantSetting() {
return new ConstantSetting();
}
}

说明:@Configuration表示一个Spring的xml配置文件。@Bean表示Spring的配置文件中的Bean配置。

十、简单调用

在domain中添加一实体:TestEntry.java,内容如下:

package com.test.domain;

import lombok.Data;

@Data
public class TestEntry {
private Integer id;
private String name;
}

在controller中建一个HelloController控制器,然后内容如下:

package com.test.controller;

import com.test.constant.ConstantSetting;
import com.test.domain.TestEntry;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.lang.Nullable;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.annotation.RequestScope;
import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.ref.ReferenceQueue;
import java.nio.file.Files;
import java.util.List; @RestController
public class HelloController { /*
* 在ApplicationServer中使用了PropertySource配置了properties源后,从相应的源如resource.properties中加载值。
* */
@Value("${person.name}")
private String name; /*
* Autowired区别于Resource的不同处在于,Autowired是按类别导入,如果想指定名称,可以配合Qualifier使用。
* */
// @Autowired
// @Qualifier("constantSetting")
@Resource
private ConstantSetting constantSetting; /*
* 最简单的使用
* */
@RequestMapping("/hello")
public String hello() {
return "hello " + name + " !" + " from company " + constantSetting.getCompany();
} /*
* 系统自动直接将实体序列化为JSON返回。
* */
@RequestMapping("/constant")
@ResponseBody //相当于把结果JSON处理后返回。
public ConstantSetting constant() {
return constantSetting;
} /*
* 当使用Post请求,Content-Type=application/json调用测试: {"id":1,"name":"Sindrol"}
* */
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public TestEntry constant(@RequestBody TestEntry test) {
return test;
} /*
* 当使用Get请求
* */
@GetMapping(value = "/test")
@ResponseBody
public TestEntry constant(@RequestParam int id, @RequestParam String name) {
TestEntry test = new TestEntry();
test.setId(id);
test.setName(name);
return test;
} /*
* 当使用Get请求,并设置响应状态
* */
@GetMapping(value = "/request")
@ResponseBody
public TestEntry request(HttpServletRequest request, HttpServletResponse response, @RequestParam int id, @RequestParam String name) {
response.setStatus(500);
TestEntry test = new TestEntry();
test.setId(id);
test.setName(name);
return test;
} /*
* 当使用Post请求表单类型,传送的值可空
* */
@PostMapping(value = "/form")
@ResponseBody
public TestEntry form(@Nullable @RequestParam("id") Integer id, @Nullable @RequestParam("name") String name) {
TestEntry test = new TestEntry();
test.setId(id);
test.setName(name);
return test;
} /*
* 当使用Post请求form-data表单类型,注意在使用PostMan测试时,不要添加Content-Type头,会影响上传时真正使用的Content-Type的
* */
@PostMapping(value = "/file")
public String form(@RequestParam("filename") MultipartFile file) {
return "fileName:" + file.getOriginalFilename() + " fileSize:" + file.getSize() + " contentType:" + file.getContentType();
}
}

十一、运行ApplicationServer.java中的Main函数,并在浏览器中访问 http://127.0.0.1:8080/app/hello 即可看到效果.(中间的app虚拟应用名称是在application.yml中的server.servlet.context-path节点配置的)

 

使用SpringBoot入门案例的更多相关文章

  1. springboot入门案例----eclipse编写第一个springboot程序

    对于刚入门的springboot的新手来说,学的过程中碰到的一些问题记录下. 首先,配置好Maven环境及本地仓库 之后进入Maven安装目录conf文件夹下的settings.xml配置文件,用No ...

  2. SpringBoot入门案例——创建maven Module方式

    最近看到一个大牛写的spring boot案例,链接贴这 https://github.com/ityouknow/spring-boot-examples.git 这里通过在maven里创建多个mo ...

  3. SpringBoot快速入门(解析+入门案例源码实现)

    这里写目录标题 SpringBoot入门 一.SpringBoot 概念 二.JavaConfig 入门 1. JavaConfig 概念 2. 项目准备 三.常用注解 四.SpringBoot 入门 ...

  4. spring-cloud-Zuul学习(一)【基础篇】--入门案例【重新定义spring cloud实践】

                                                                                                    -- 2 ...

  5. springcloud+eureka简单入门案例

    springcloud+eureka简单入门案例 一.服务提供者 直接提供服务,入门案例没有特别要设置的地方,注意下端口,由于要启动多个服务,可能会冲突 配置文件(src/main/resources ...

  6. Springboot入门及配置文件介绍(内置属性、自定义属性、属性封装类)

    目的: 1.Springboot入门 SpringBoot是什么? 使用Idea配置SpringBoo使用t项目 测试案例 2.Springboot配置文件介绍 内置属性 自定义属性 属性封装类 Sp ...

  7. SpringBoot入门及深入

    一:SpringBoot简介 当前互联网后端开发中,JavaEE占据了主导地位.对JavaEE开发,首选框架是Spring框架.在传统的Spring开发中,需要使用大量的与业务无关的XML配置才能使S ...

  8. (十八)整合Nacos组件,环境搭建和入门案例详解

    整合Nacos组件,环境搭建和入门案例详解 1.Nacos基础简介 1.1 关键特性 1.2 专业术语解释 1.3 Nacos生态圈 2.SpringBoot整合Nacos 2.1 新建配置 2.2 ...

  9. Springboot 入门及Demo

    一:SpringBoot入门1.1:SpringBoot简介Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的 ...

随机推荐

  1. jmeter在返回的json串中提取需要的值

    接口测试时我们需要对某条信息进行修改,如我们先创建了一篇文章,然后进行修改操作 我们就需要找到该文章的唯一标志,如id 示例:我们要将下图返回的json 中id进行提取 注:可输入$.加需要的key即 ...

  2. java select 多字段处理查询结果辅助类

    接口 ResultSetMetaData 可用于获取关于 ResultSet 对象中列的类型和属性信息的对象 使用示例: ResultSet rs = stmt.executeQuery(" ...

  3. Number对象的常用属性和方法

    方法 描述 isNan() 检查值是否为数字 toFied() 将特定数字四舍五入至小数位数(返回一个字符串) toPrecision() 按数字的位数四舍五入(返回一个字符串) toExponent ...

  4. xxx is not in sudoers file 解决(转)

    解决方案:首需要切换到root身份$su -(注意有- ,这和su是不同的,在用命令"su"的时候只是切换到root,但没有把root的环境变量传过去,还是当前用户的环境变量,用& ...

  5. 《剑指offer》-二叉搜索树与双向链表

    输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 题目的描述不是很习惯.题目的意思是把二叉树从左到右遍历,相当于双向链表的遍历. 其实 ...

  6. HDU 4763 求最大长度的串A,使得S满足APAQA

    给一个串,让你找一个子串,形如EAEBE,就是一个串在开头结尾中间各出现一次,问这个E最长是多少 Sample Input5xyabcaaaaaaabaaaxoaaaaa Sample Output0 ...

  7. MySQL索引失效的几种情况

    1.索引不存储null值 更准确的说,单列索引不存储null值,复合索引不存储全为null的值.索引不能存储Null,所以对这列采用is null条件时,因为索引上根本 没Null值,不能利用到索引, ...

  8. fbs创建windows下安装qtpy应用程序!

    cd 到python3.6目录下Python -m venv venv 创建虚拟环境call venv\scripts\activate.bat 激活虚拟环境将pip升级到最新版19.2pip ins ...

  9. hdu 1106 去5排序

    题目链接:https://vjudge.net/problem/HDU-1106 题目大意: 输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数 ...

  10. vue中svg图标使用

    在前端开发中,经常会用到svg图标,在vue开发的中,经常会借助一些第三方插件,经常用的有vue-svg-icon,基本使用步骤为: 1.安装插件(会提示没有安装xml-loader,只需要安装下xm ...