Spring boot 学习(前篇)

作者: 秋天de童话 | 来源:发表于2017-07-15 20:50 被阅读352次

    一、准备工作

    环境:

    jdk: jdk1.8
    maven: maven3.39
    Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具
    http://maven.apache.org/download.cgi
    安装:http://jingyan.baidu.com/article/20095761bd195ecb0621b465.html

    image.png

    IDEA
    http://www.jetbrains.com/idea/

    image.png

    二、新建一个项目HelloSpringBoot

    image.png image.png image.png image.png

    关于Maven详解
    .Maven的作用
    在开发中,为了保证编译通过,我们会到处去寻找jar包,当编译通过了,运行的时候,却发现"ClassNotFoundException",我们想到的是,难道还差jar包?
    每个Java项目的目录结构都没有一个统一的标准,配置文件到处都是,单元测试代码到底应该放在那里也没有一个权威的规范。
    因此,我们就要用到Maven(使用Ant也可以,不过编写Ant的xml脚本比较麻烦)----一个项目管理工具。
    Maven主要做了两件事:
    统一开发规范与工具
    统一管理jar包

    image.png image.png image.png

    第一种启动方式:

    image.png

    真慢。。

    image.png

    访问http://localhost:8080/
    因为什么页面都没写,所以是返回404

    image.png

    新建一个类HelloController

    image.png image.png
    @RestController
    public class HelloController {
        @RequestMapping(value = "/hello" , method = RequestMethod.GET)
        public String say(){
            return "Hello Spring Boot!";
        }
    }
    
    
    访问http://localhost:8080/hello
    image.png
    第二种启动方式

    进入到项目目录

    mvn spring-boot:run
    
    image.png
    第三种启动方式
    image.png
    //先编译下环境
    mvn install
    
    image.png
    cd target
    java -jar test-0.0.1-SNAPSHOT.jar
    
    image.png image.png

    三、属性配置

    application.properties
    修改下端口和访问路径

    server.port=8081
    server.context-path=/test
    
    image.png

    启动:

    image.png
    访问:http://localhost:8081/test/hello image.png

    使用yml文件配置
    yml简介
    YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。

    其他比较
    http://www.cnblogs.com/songchaoke/p/3376323.html

    application.yml
    设置端口号改为:8082,区分下。

    server:
      port: 8082
      context-path: /test
    
    image.png

    删除application.properties
    访问http://localhost:8082/test/hello

    image.png

    配置一个参数 cupSize:

    image.png
    server:
      port: 8082
      context-path: /test
      cupSize: B
    

    在HelloController.java 中获取到。

    image.png
    @RestController
    public class HelloController {
        @Value("${cupSize}")
        private String cupSize;
    
        @RequestMapping(value = "/hello" , method = RequestMethod.GET)
        public String say(){
            return cupSize;
        }
    }
    

    报错:
    Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'cupSize' in value "${cupSize}"

    image.png

    修改代码:

    image.png
    @Value("${server.cupSize}")
        public String cupSize;
    

    运行http://localhost:8082/test/hello

    image.png

    content

    image.png
    server:
      port: 8082
      context-path: /test
      cupSize: B
      age: 18
      content: "cupSize: ${server.cupSize},age: ${server.age}"
    
    @RestController
    public class HelloController {
        @Value("${server.cupSize}")
        public String cupSize;
    
        @Value("${server.age}")
        public Integer age;
    
        @Value("${server.content}")
        public String content;
    
    
    
        @RequestMapping(value = "/hello" , method = RequestMethod.GET)
        public String say(){
            return content;
        }
    }
    

    访问http://localhost:8082/test/hello

    image.png
    多项注入参数
    image.png
    application.yml
      server:
        port: 8082
        context-path: /test
      girl:
        cupSize: B
        age: 18
    
    新建配置类 GirlProperties.java
    @Component
    @ConfigurationProperties(prefix = "girl")
    public class GirlProperties {
        private String cupSize;
        private Integer age;
    
        public void setCupSize(String cupSize) {
            this.cupSize = cupSize;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getCupSize() {
            return cupSize;
        }
    
        public Integer getAge() {
            return age;
        }
    }
    

    ps:
    简化配置文件的读取:
    @value
    [http://www.cnblogs.com/BensonHe/p/3963940.html]
    分组获取:
    @Component作用
    http://www.cnblogs.com/savage-ce/p/5667596.html
    @ConfigurationProperties
    @Autowired

    HelloController.java

    @RestController
    public class HelloController {
      /*  @Value("${server.cupSize}")
        public String cupSize;
    
        @Value("${server.age}")
        public Integer age;
    
        @Value("${server.content}")
        public String content;
    */
    
      @Autowired
      private GirlProperties girlProperties;
    
    
        @RequestMapping(value = "/hello" , method = RequestMethod.GET)
        public String say(){
            return girlProperties.getCupSize();
        }
    }
    

    运行结果:

    image.png
    多个配置文件application.yml转换

    application.yml

    image.png
      spring:
        profiles:
          active: dev
    

    application-dev.yml

      server:
        port: 8082
        context-path: /test
      girl:
        cupSize: B
        age: 18
    

    application-prod.yml

      server:
        port: 8081
        context-path: /test
      girl:
        cupSize: F
        age: 18
    
    

    运行:http://localhost:8082/test/hello

    image.png

    修改 :application.yml

      spring:
        profiles:
          active: prod
    

    访问:http://localhost:8081/test/hello

    image.png
    同时启动不同配置下的服务

    启动application-prod.yml配置环境

    //cd test项目目录下
    mvn install
    java -jar target/test-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
    java -jar target/test-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
    

    可以尝试启动下,注意端口不要被占用。

    知识点:


    image.png

    四、Controller的使用

    image.png

    @Controller
    @ResponseBody
    等同于
    @RestController

    分别访问"/hello","/hi" 后缀得到相同结果。
    @RequestMapping(value = {"/hello","/hi"} , method = RequestMethod.GET)
    

    访问:http://localhost:8081/test/hi

    image.png

    @RequestMapping("/hi")

    @Controller
    @ResponseBody
    @RequestMapping("/hi")
    public class HelloController {
      @Autowired
      private GirlProperties girlProperties;
    
    
        @RequestMapping(value = "/say" , method = RequestMethod.GET)
        public String say(){
            return girlProperties.getCupSize();
        }
    }
    
    image.png

    我们也可以看到启动项中已经标明访问路径:

    image.png

    访问:http://localhost:8081/test/hi/say

    image.png

    method = RequestMethod.POST 可以下载个postman 试试

    注解参数
    image.png
    @PathVariable
     @RequestMapping(value = "/say/{id}" , method = RequestMethod.GET)
        public String say(@PathVariable("id") Integer id){
            return "id : " + id;
        }
    
    image.png

    访问:http://localhost:8081/test/hi/say/11

    image.png

    访问:http://localhost:8081/test/hi/say/xxx
    报错!

    image.png

    同理:

    @RequestMapping(value = "/{id}/say" , method = RequestMethod.GET)
    

    前后输入效果一样的

    @RequestParam
     @RequestMapping(value = "/say" , method = RequestMethod.GET)
        public String say(@RequestParam("id") Integer myid){
            return "id : " + myid;
        }
    
    image.png

    访问:http://localhost:8081/test/hi/say?idd=111

    image.png

    访问:http://localhost:8081/test/hi/say?idd=

    image.png

    修改代码:

     @RequestMapping(value = "/say" , method = RequestMethod.GET)
        public String say(@RequestParam(value="id",required = false,defaultValue = "0") Integer myid){
            return "idd : " + myid;
        }
    
    image.png

    不写参数默认是 0


    image.png

    此外:(同理POST)

    @RequestMapping(value = "/say" , method = RequestMethod.GET)
    //可简化成:
    @GetMapping(value = "/say")
    

    参考资料:http://www.imooc.com/video/13592

    相关文章

      网友评论

        本文标题:Spring boot 学习(前篇)

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