SpringBoot使用详细

目录

Spring Boot是什么?

选择Spring Boot,因为它提供的功能和优点如下 -

创建Springboot项目

解决json中null问题

yml

@Value

 @RestController

 @RequestMapping

 @PathVariable

 @Requestbody


Spring Boot是什么?

Spring Boot为Java开发人员提供了一个很好的平台,可以开发一个可以运行的独立和生产级Spring应用程序。可以开始使用最少的配置,而无需进行整个Spring配置设置。

选择Spring Boot,因为它提供的功能和优点如下 -

  • 它提供了一种灵活的方法来配置Java Bean,XML配置和数据库事务。
  • 它提供强大的批处理和管理REST端点。
  • 在Spring Boot中,一切都是自动配置的; 无需手动配置。
  • 它提供基于注释的spring应用程序。
  • 简化依赖管理。
  • 它包括嵌入式Servlet容器。

请看下面的Spring Boot启动器,以便更好地理解 -
Spring Boot Starter Actuator依赖关系用于监视和管理应用程序。 其代码如下所示 -

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Spring Boot Starter Security依赖项用于Spring Security。 其代码如下所示 -

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Spring Boot Starter Web依赖项用于编写Rest端点。 其代码如下所示 -

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Spring Boot Starter Thyme Leaf依赖项用于创建Web应用程序。 其代码如下所示 -

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

Spring Boot Starter Test依赖项用于编写测试用例。 其代码如下所示 -

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test<artifactId>
</dependency>

创建Springboot项目

创建项目,

这个是选择用什么语言做开发,选java,这个项目用Marven来管理,选JDK,把下面的java中的选择为和你JDK相同的版本。

 然后这里springboot问你,需不需要我帮你导入包,这里不选的后,后期我们在pom包中手动的添加也是可以的,不过搞懂之后,就直接可以在这里选择就不用手动了,创建完成之后,我们可以在main中找到一个为你取的名字后面+Application的类,长这个样子的

我们发现这个类是可以启动的,这个就是一个入口函数,不用对其做任何配置,现在我们使用xml的那套方法就已经可以使用springboot了,下面我们写一个Controller来测试一下

@RestController
@RequestMapping( "/books")
public class BookController {

    @GetMapping("/{id}")
    @ResponseBody
    public String getByID(@PathVariable Integer id) {
        System.out.println("id" + id);
        return "springboot is running";
    }

    @RequestMapping("/booklit")
    @ResponseBody
    public String BookControllerBooklist(){
        System.out.println("id2");
        return "hello spring";
    }
}

运行一下

 运行一下就可以发现springboot已经跑起来了,Tomcat服务器是启动的,运行的接口是8080,先请求接口试一下

 

 测试完成,没有出现问题,就说明我们Springboot的功能太强大了,直接不用做配置,用请求的注解写好,就已经可以用了,如果用Spring来做,那就相当的复杂了,在当中我们可以测试一下不同数据类型传输过来的支持情况

@RestController
@RequestMapping( "/books")
public class BookController {

   @RequestMapping("/bookMap")
    @ResponseBody
    public Map getByMap() {
       Map map = new HashMap();
        map.put("My name is ","demo");
        map.put("The age is ",22);
        return map;
    }

    @RequestMapping("/booklist")
    @ResponseBody
    public List getBylist() {
        List list = new ArrayList();
        list.add("demo1");
        list.add(1111);
        return list;
    }

    @RequestMapping("/bookObject")
    @ResponseBody
    public Student getByobject() {

       return new Student("demo",22);
    }
返回map的json格式

{ "The age is ": 22, "My name is ": "demo"}

返回list的json格式

["demo1",1111]

返回对象的json格式

{"name": "demo","age": 22}

解决json中null问题

现在可能出现这种情况,我们在传输数据的时候,如果说后端传送过来的是NULL,但是我们通常接收到这个值应该是空的,所以我们导入jackson的包可以帮我们解决这个问题

package com.example.demo.resouce;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

import java.io.IOException;

@Configuration
public class Jackson_config {
        @Bean
        @Primary
        @ConditionalOnMissingBean(ObjectMapper.class)
        public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
            ObjectMapper objectMapper = builder.createXmlMapper(false).build();
            objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
                @Override
                public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, IOException {
                    jsonGenerator.writeString("");
                }
            });
            return objectMapper;
        }
    }

这一小块代码就可以解决json的空值的问题,测试一下


   @RequestMapping("/bookMap")
    @ResponseBody
    public Map getByMap() {
       Map map = new HashMap();
        map.put("My name is ",null);
        map.put("The age is ",22);
        return map;
    }

{"The age is ": 22, "My name is ": ""}

yml

yml是一种文件类型,通常我们用来做配置用的、

  • 基本的语法为key:vlaue
  • 冒号后面加一个空格
  • 对大小写很敏感
  • 字符串可以不用双引号
  • 缩进只能空格不能tab键

我们通常在yml文件中可以配各种各样的东西,比如配不同的端口号,因为配置不同层次的接口的端口号是不同的,还可以把常量配置在当中,比如可以配置mybatis中的mysql数据驱动,用户名、密码等...

serve:
 port: 8080
 port1: 8002

mybatis:
 configlocation: Classpath:mybatis-config.xml
 mapper-location: Classpath:mapper/*.xml

@Value

现在的疑问是,我们配置了,但是要使用才能生效对吧,所以我们使用注解@Value,放在声明上就可以调用到这个值,例如

public class BookController {

    @Value("${serve.port}")
    String port;

   @RequestMapping("/bookMap")
    @ResponseBody
    public Map getByMap() {
       Map map = new HashMap();
        map.put("My name is ",null);
        map.put("The age is ",22);
       System.out.println(port);
        return map;
    }
}

经过测试后是可以正确的输出值的 

 @RestController

这个注解是在spring boot中新增的注解,源码中我们可以看到

 看来源码后我们可以清楚的看见有@Controller 和 @Responsbody,所以我们是可以知道的。这个注解相当于一个总结,功能总到一起了

 @RequestMapping

 这个注解是用来处理地址的映射,我们使用在类上,表示下面方法如果还要调用此注释,都需要一开始的url地址,放在方法上,就可以直接访问该url地址,当中的value就是设置url地址的,标准的来说是设置url地址中的哈希地址,method用来设置请求的类型

@RequestMapping( "/books")
public class BookController {

    @Value("${serve.port}")
    String port;

   @RequestMapping("/bookMap")
    @ResponseBody
    public Map getByMap() {
       Map map = new HashMap();
        map.put("My name is ",null);
        map.put("The age is ",22);
       System.out.println(port);
        return map;
    }

 @PathVariable

这个注解也比较好理解,主要是用来接收url中的参数,把这个注解放在接收的形参中,我们就可以通过接收到这个后面的参数,一看代码就懂了,接收i的值,用花括号包着统一的名称就接收到了

@RestController
@RequestMapping( "/books")
public class BookController {

   @RequestMapping("/bookMap/{i}")
    @ResponseBody
    public Map getByMap(@PathVariable Integer i) {
       Map map = new HashMap();
        map.put("My name is ",i);
        map.put("The age is ",22);
        return map;
    }

 

 @Requestbody

这个注解是用来接收前端中传过来的,前端通过json传送值,我们就可以通过这个注解拿到要传过来的值了

@RestController
@RequestMapping( "/books")
public class BookController {

   @PostMapping("/bookMap")
    @ResponseBody
    public Map getByMap(@RequestBody Student student) {
       Map map = new HashMap();
        map.put("My name is ",student.getName());
        map.put("The age is ",student.getAge());
        return map;
    }

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈Demo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值