ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringBoot学习

2019-03-07 17:38:42  阅读:407  来源: 互联网

标签:RequestMapping springframework 学习 String import org public SpringBoot


S

pringBoot学习

SpringBoot官网文档路径:

https://docs.spring.io/spring-boot/docs/2.0.0.RC1/reference/htmlsingle/#using-boot-devtools-property-defaults

一、创建第一个SpringBoot

1、创建一个maven项目

(1)File—>New—>Project(建议使用jdk1.8或以上)

(2)点击Next

(3)输入GroupId和ArtifactId后,点击Next

(4)点击Finish即可成功创建maven项目

 

2、配置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.example</groupId>
    <artifactId>SpringBootDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--继承默认值为Spring Boot -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RC1</version>
    </parent>

    <!-- 添加Web应用程序的典型依赖项  -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <!-- 打包为可执行jar -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <!-- 添加Spring存储库 -->
    <!-- (如果使用的是.RELEASE版本,则不需要这样) -->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>
</project>

3、在 src/main/java目录下新建Example.java文件

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableAutoConfiguration
public class Example {

    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }

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

}

4、运行main方法

5、浏览器中访问:http://localhost:8080/

6、项目中一般是以jar方式部署

(1)生成jar包

(2)以jar包部署方式(打开cmd)

a.默认日志级别INFO,命令:java -jar SpringBootDemo-1.0-SNAPSHOT.jar

b.关闭应用程序,ctrl+C

c.启动时可以设置日志级别为debug 命令:java -jar SpringBootDemo-1.0-SNAPSHOT.jar --debug

d.常见错误,端口冲突,需要检查一下是否其他地方都使用一样的端口

 

二、SpringBoot常用注解说明

1、@Controller 处理Http请求

2、@RestController Spring框架4版本之后出来的注解,之前版本返回json数据需要@ResponseBody配合@Controller

代码一和代码二的效果一致:

代码一:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@EnableAutoConfiguration
public class Example {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

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

}

代码二:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableAutoConfiguration
public class Example {

    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }

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

}

 

3、@RequestMapping 配置url映射关系

4、@PathVariable 获取url中的数据

(1)定义URL变量规则:可以在@RequestMapping注解中用{}来表明它的变量部分,例如:

@RequestMapping("/users/{username}")

这里{username}就是我们定义的变量规则,username是变量的名字,那么这个URL路由可以匹配下列任意URL并进行处理:

  • /users/tianmaying
  • /users/ricky
  • users/tmy1234

需要注意的是,在默认情况下,变量中不可以包含URL的分隔符/,例如路由不能匹配/users/tianmaying/ricky,即使你认为tianmaying/ricky是一个存在的用户名。

@RequestMapping("/users/{username}")
public String userProfile(@PathVariable String username){
    return "user:" + username;
}

 

(2)当@Controller处理HTTP请求时,userProfile的参数username会自动设置为URL中对应变量username(同名赋值)的值

在默认的情况下,Spring会对@PathVariable注解的变量进行自动赋值,当然你也可以指定@PathVariable使用哪一个URL中的变量:

@RequestMapping("/users/{name}")
public String userProfile(@PathVariable("name") String username){
    return "user:" + username;
}

(3)定义多个URL变量

@PathVariable注解的参数可以是一些基本的简单类型:int,long,Date,String等,Spring能根据URL变量的具体值以及函数参数的类型来进行转换,例如/user/testUserName/intParam/5,会将“testUserName”的值赋给username,而5赋值给int变量num。

@RequestMapping("/user/{username}/intParam/{num}")
public String getUserInfo(@PathVariable String username , @PathVariable int num){
    return "user: " + username + ";intParam:" + num;
}

(4)匹配正则表达式

除了简单地定义{username}变量,还可以定义正则表达式进行更精确的控制,定义语法是{变量名:正则表达式}[a-zA-Z0-9_]+是一个正则表达式,表示只能包含小写字母,大写字母,数字,下划线。如此设置URL变量规则后,不合法的URL则不会被处理,直接由SpringMVC框架返回404Not Found。

 

5、@RequestParam 获取请求参数的值

@RequestMapping("/user/test")
public String getUserName1(@RequestParam("userName") String userName) {
    return "userName = " + userName;
}

 一旦我们在方法中定义了@RequestParam变量,如果访问的URL中不带有相应的参数,就会抛出异常——这是显然的,Spring尝试帮我们进行绑定,然而没有成功。

但有的时候,参数确实不一定永远都存在,这是我们可以通过定义required属性:

@RequestMapping("/user/test")
public String getUserName1(@RequestParam(name="userName",required = false) String userName) {
    return "userName = " + userName;
}

当然,在参数不存在的情况下,可能希望变量有一个默认值:

@RequestMapping("/user/test")
public String getUserName1(@RequestParam(name = "userName" , required = false , defaultValue="admin") String userName) {
    return "userName = " + userName;
}

 

6、@GetMapping、@PostMapping组合注解

(1)@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。该注解将HTTP Get 映射到 特定的处理方法上。

即可以使用@GetMapping(value = “/hello”)来代替@RequestMapping(value=”/hello”,method= RequestMethod.GET)。即可以让我们精简代码。

@GetMapping(value = "/helloGet")
public String helloGet() {
    return "helloGet";
}

@RequestMapping(value = "/helloGet1",method= RequestMethod.GET)
public String helloGet1() {
    return "helloGet1";
}

 

 

(2)@PostMapping是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。该注解将HTTP Post 映射到 特定的处理方法上。

即可以使用@PostMapping(value = “/hello”)来代替@RequestMapping(value=”/hello”,method= RequestMethod.POST)。即可以让我们精简代码。

@PostMapping(value = "/helloPost")
public String helloPost() {
    return "helloPost";
}

@RequestMapping(value = "/helloPost1",method= RequestMethod.POST)
public String helloPost1() {
    return "helloPost1";
}

 

三、自定义Banner

1、在SpringBoot 启动的时候,首先在命令行上会打印出如下的信息:

这就是 SpringBoot 的默认 banner。这个 启动 banner 是可以进行定制的。

2、自定义Banner

(1)第一种定制 SpringBoot 的方式是编辑一个banner.txt 文件,然后在里面输入要在 banner 里面显示的内容,最后把这个文件存放到 resource 目录下。

生成banner.txt网页地址:https://www.bootschool.net/ascii

点击下载bannner.txt文件按钮,最后把这个文件存放到 resource 目录下,启动SpringBoot项目:

(2)图片Banner定制,图片的banner支持gif、png、jpef格式的图片。使用时,选用合适的图片,然后将图片名字改成banner,和文字的banner.txt文件一样,放到resource目录下即可 

(3)如果在resource目录下既有 banner.txt 文件,又有 banner 的图片文件,SpringBoot 会先显示图片 banner ,然后再显示文本的 banner。

 

四、自定义SpringApplication

1、如果默认的 SpringApplication 不符合你的口味,你可以创建一个本地实例并对它进行自定义。例如,想要关闭banner你可以这样写:

public static void main(String[] args) throws Exception {
    SpringApplication app = new SpringApplication(Example.class);
    app.setBannerMode(Banner.Mode.OFF);
    app.run(args);
}

这样的banner的内容项目启动的时候就不会输出:

 

 

五、Application事件和监听器

应用运行时,事件会以下面的次序发送:
1、在运行开始,但除了监听器注册和初始化以外的任何处理之前,会发送一个 ApplicationStartedEvent 。
2、在Environment将被用于已知的上下文,但在上下文被创建前,会发送一个 ApplicationEnvironmentPreparedEvent 。
3、在refresh开始前,但在bean定义已被加载后,会发送一个 ApplicationPreparedEvent 。
4、在refresh之后,相关的回调处理完,会发送一个 ApplicationReadyEvent ,表示应用准备好接收请求了。
5、启动过程中如果出现异常,会发送一个 ApplicationFailedEvent 。

public static void main(String[] args) throws Exception {
    SpringApplication application = new SpringApplication(Example.class);
    application.setBannerMode(Banner.Mode.OFF);
    application.addListeners(new MyListennerByAddedToApplication());
    application.run(args);
}

监听器

import org.springframework.boot.context.event.*;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;

/**
 * Created by minstone on 2019/3/5.
 */
public class MyListennerByAddedToApplication implements ApplicationListener<ApplicationEvent> {

    @Override
    public void onApplicationEvent(ApplicationEvent arg0) {
        // TODO Auto-generated method stub
        if(arg0.getClass().isAssignableFrom(ApplicationStartingEvent.class)){

            System.out.println(this.getClass()+"——ApplicationStartingEvent hapends");
        }else if(arg0.getClass().isAssignableFrom(ApplicationEnvironmentPreparedEvent.class)){

            System.out.println(this.getClass()+"——在Environment将被用于已知的上下文,但在上下文被创建前,ApplicationEnvironmentPreparedEvent hapends");
        }else if(arg0.getClass().isAssignableFrom(ApplicationPreparedEvent.class)){

            System.out.println(this.getClass()+"——在refresh开始前,但在bean定义已被加载后,ApplicationPreparedEvent hapends");
        }else if(arg0.getClass().isAssignableFrom(ApplicationStartedEvent.class)){

            System.out.println(this.getClass()+"——在运行开始,但除了监听器注册和初始化以外的任何处理之前,ApplicationStartedEvent hapends");
        }else if(arg0.getClass().isAssignableFrom(ApplicationReadyEvent.class)){

            System.out.println(this.getClass()+"——在refresh之后,相关的回调处理完,表示应用准备好接收请求了。ApplicationReadyEvent hapends");
        }else if(arg0.getClass().isAssignableFrom(ApplicationFailedEvent.class)){

            System.err.println(this.getClass()+"——启动过程中如果出现异常, ApplicationFailedEvent happends");
        }
    }
}

运行结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



 

标签:RequestMapping,springframework,学习,String,import,org,public,SpringBoot
来源: https://www.cnblogs.com/xuegu/p/10450747.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有