您当前的位置:首页 > 计算机 > 编程开发 > Spring Boot

Spring Boot 注解大全----详讲

时间:12-07来源:作者:点击数:
在这里插入图片描述
一、注解(annotations)列表

@SpringBootApplication:

包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。

其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。

@Configuration等同于spring的XML配置文件;使用Java代码可以检查类型安全。

@EnableAutoConfiguration自动配置。

@ComponentScan组件扫描,可自动发现和装配一些Bean。

@Component可配合CommandLineRunner使用,在程序启动后执行一些基础任务。

@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。

@Autowired自动导入。

@PathVariable获取参数。

@JsonBackReference解决嵌套外链问题。

@RepositoryRestResourcepublic配合spring-boot-starter-data-rest使用。

二、注解(annotations)详解

@SpringBootApplication:申明让spring boot自动给程序进行必要的配置,

这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。

package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤🐱‍👤

@ResponseBody:表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。

在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。

比如异步获取json数据,加上@responsebody后,会直接返回json数据。

该注解一般会配合@RequestMapping一起使用。示例代码:

@RequestMapping(“/test”)
@ResponseBody
public String test(){
    return”ok”;
}

位置:注解在方法头上

作用:将方法的返回值以 json/xml 的数据格式返回给客户端,如果是JavaBean对象,调用 getxxx()方法获取属性值,如果是 map集合,调用 get(key)方法获取属性值,然后以键值对的方式转成 json字符串。

在这里插入图片描述

打印结果如下

在这里插入图片描述

没有该注解的影响:将返回一个ModelAndView给客户端,即返回视图,常用的场景是跳转 jsp 页面。

在这里插入图片描述

提示没有该页面。

🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣

**@Controller:**用于定义控制器类,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层)

一般这个注解在类中,通常方法需要配合注解@RequestMapping。

示例代码:

@Controller
@RequestMapping(“/demoInfo”)
publicclass DemoController {
    @Autowired
    private DemoInfoService demoInfoService;

    @RequestMapping("/hello")
    public String hello(Map map){
        System.out.println("DemoController.hello()");
        map.put("hello","from TemplateController.helloHtml");
        //会使用hello.html或者hello.ftl模板进行渲染显示.
        return"/hello";
    }
}

😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁

@RestController:用于标注控制层组件

@RestController是 Spring Boot 新增的一个注解,我们看一下该注解都包含了哪些东西。

在这里插入图片描述

可以看出,@RestController注解包含了原来的@Controller和@ResponseBody注解,使用过Spring 的朋友对@Controller注解已经非常了解了,这里不再赘述,

@ResponseBody注解是将返回的数据结构转换为 Json 格式。所以@RestController可以看作是@Controller和@ResponseBody的结合体,相当于偷个懒。

我们使用@RestController之后就不用再使用@Controller了。

但是需要注意一个问题:如果是前后端分离,不用模板渲染的话,比如Thymeleaf,这种情况下是可以直接使用@RestController将数据以 json 格式传给前端,前端拿到之后解析;但如果不是前后端分离,需要使用模板来渲染的话,一般 Controller 中都会返回到具体的页面,那么此时就不能使用@RestController了,比如:

在这里插入图片描述

其实是需要返回到 user.html 页面的,如果使用@RestController的话,会将 user 作为字符串返回的,所以这时候我们需要使用@Controller注解。

🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶🎶

@RequestMapping:是一个用来处理请求地址映射的注解,它可以用于类上,也可以用于方法上。在类的级别上的注解会将一个特定请求或者请求模式映射到一个控制器之上,表示类中的所有响应请求的方法都是以该地址作为父路径;在方法的级别表示进一步指定到处理方法的映射关系。

该注解有6个属性,一般在项目中比较常用的有三个属性:value、method 和 produces。

  • value 属性:指定请求的实际地址,value 可以省略不写
  • method 属性:指定请求的类型,主要有 GET、PUT、POST、DELETE,默认为 GET
  • produces属性:指定返回内容类型,如 produces = “application/json; charset=UTF-8”

@RequestMapping注解比较简单,举个例子:

在这里插入图片描述

这个很简单,启动项目在浏览器中输入localhost:8080/test/get测试一下即可。

针对四种不同的请求方式,是有相应注解的,不用每次在@RequestMapping注解中加 method 属性来指定,上面的 GET 方式请求可以直接使用@GetMapping("/get")注解,效果一样。

相应地,PUT方式、POST 方式和 DELETE 方式对应的注解分别为@PutMapping、@PostMapping和DeleteMapping。

🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞

@EnableAutoConfiguration:Spring Boot自动配置(auto-configuration):尝试根据你添加的jar依赖自动配置你的Spring应用。

例如,如果你的classpath下存在HSQLDB,并且你没有手动配置任何数据库连接beans,那么我们将自动配置一个内存型(in-memory)数据库”。

你可以将@EnableAutoConfiguration或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。

如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。

🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉

@ComponentScan:表示将该类自动发现扫描组件。

个人理解相当于,如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。

我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。可以自动收集所有的Spring组件,包括@Configuration类。

如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。

🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍

@Configuration:相当于传统的xml配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件。
  • @Import:用来导入其他配置类。
  • @ImportResource:用来加载xml配置文件。
  • @Autowired:自动导入依赖的bean
  • @Service:一般用于修饰service层的组件

@Repository:使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。

@Bean:用@Bean标注方法等价于XML中配置的bean。

@Value:注入Spring boot application.properties配置的属性的值。示例代码:

@Value(value = “#{message}”)
private String message;

✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔

@PathVariable:主要是用来获取 url 参数,Spring Boot 支持 restfull 风格的 url,比如一个 GET请求携带一个参数 id 过来,我们将 id 作为参数接收,可以使用@PathVariable注解。如下:
在这里插入图片描述

这里需要注意一个问题,如果想要 url 中占位符中的 id 值直接赋值到参数 id 中,需要保证 url 中的参数和方法接收参数一致,否则就无法接收。如果不一致的话,其实也可以解决,需要用@PathVariable中的 value 属性来指定对应关系。如下:

在这里插入图片描述

对于访问的 url,占位符的位置可以在任何位置,不一定非要在最后,比如这样也行:/xxx/{id}/user。另外,url 也支持多个占位符,方法参数使用同样数量的参数来接收,原理和一个参数是一样的,例如:

在这里插入图片描述

运行项目,在浏览器中请求localhost:8080/test/user/2/zhangsan可以看到控制台输出如下信息:

在这里插入图片描述

所以支持多个参数的接收。同样地,如果 url 中的参数和方法中的参数名称不同的话,也需要使用value 属性来绑定两个参数。

👀👀👀👀👀👀👀👀👀👀👀👀👀👀👀👀👀👀👀👀👀👀👀👀👀👀👀👀

@RequestParam:将请求中指定名称的参数给控制器当中的形参赋值

除了 value 属性外,还有个两个属性比较常用

  • required 属性:true 表示该参数必须要传,否则就会报 404 错误,false 表示可有可无。
  • defaultValue 属性:默认值,表示如果请求中没有同名参数时的默认值。

问题:

如果一个表单提交一个属性值叫username,那后台想要接受到这个属性值,那么就必须在方法中定义一个参数叫username,如果前台的属性值和后台的形参不一样,这个数据是封装不了的,后台又不得不拿到前台提交的数据username.那么@RequestParam这个注解就会解决这么一个问题.

使用方法:

在这里插入图片描述
在这里插入图片描述
@RequestBody:注解用于接收前端传来的实体,接收参数也是对应的实体。

比如前端通过 json 提交传来两个参数 username 和 password,此时我们需要在后端封装一个实体来接收。在传递的参数比较多的情况下,使用@RequestBody接收会非常方便。例如:

在这里插入图片描述
在这里插入图片描述

我们使用 postman 工具来测试一下效果,打开 postman,然后输入请求地址和参数,参数我们用 json来模拟,如下图所有,调用之后返回 success。

在这里插入图片描述

同时看一下后台控制台输出的日志:

在这里插入图片描述

可以看出,@RequestBody注解用于 POST 请求上,接收 json 实体参数。它和上面我们介绍的表单提交有点类似,只不过参数的格式不同,一个是 json 实体,一个是表单提交。在实际项目中根据具体场景和需要使用对应的注解即可。

位置:注解在方法的形参前

作用:接收 json/xml封装成 JavaBean 对象或者集合,注意 xml格式的支持需要添加额外的依赖。

在这里插入图片描述

传参格式如下:

在这里插入图片描述

注意点:如果是前端页面传参时,需要手动设置 contentType: “application/json”,默认的为 ``application/x-www-form-urlencoded`。

没有该注解的影响:JavaBean 对象或集合将无法接收 json/xml

在这里插入图片描述
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门