zoukankan      html  css  js  c++  java
  • 使用SpringBoot入门案例

    一、创建项目

      今天给大家讲一个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节点配置的)

     
  • 相关阅读:
    程序员老鸟写sql语句的经验之谈
    工作流系统在OA系统中应用
    安卓手机模拟器的安装
    专注于 web报表, web打印, 自定义web表单, web工作流管理系统 方面的技术
    工作流系统之自定义脚本的实现方式
    12306,是bug呢还是bug呢?
    精雕细琢工作流的状态管理
    eworkflow,eform,ebiao和信息系统的集成过程(for dotnet)
    WPF界面UI设计开发心得
    云计算从基础到应用架构系列索引
  • 原文地址:https://www.cnblogs.com/songxingzhu/p/9598954.html
Copyright © 2011-2022 走看看