springboot之常用注解(全网最详细,保姆教程,一步一步教你操作)

1.准备环境

创建一个springboot项目

参考:idea2023创建spring boot项目,并在本地运行起来(最详细保姆教程)-CSDN博客

(根据自己的jdk版本选择,创建项目的时候也可用默认的maven)

本人是创建了空项目,并在空项目创建了boot3-03-demo

步骤可参考Spingboot3详解(全网最详细,新建springboot项目并详解各种组件的用法)-CSDN博客

2.@Controller和@RequestMapping

@Controller寻找的是页面

注意:如果resources下没有templates文件夹,就自己创建一个,该文件夹存放html文件

           如果resources下的static文件夹下有html文件,就删了,static不要存放html文件

(1)创建controller包(com.example.boot303demo下),再在下面创建ViewController类

(2)再src/main/resources/templates下创建一个html文件view.html

(如果view.html放在static文件夹下,访问网址可能会报错)

ViewController类

package com.example.boot303demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 * 描述:controller注解相关的测试
 * @description
 * @author: Admin
 * @create: 2023/12/9 10:26
 */
@Controller
public class ViewController {
    @RequestMapping("view")  //url访问链接:http://localhost:8080/view
//    @RequestMapping("/view/list")  //url访问链接:http://localhost:8080/view/list
    public String view(){
        return "view.html";
    }
}

view.html内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>视图页面</title>
</head>
<body>
<div>我的页面</div>
</body>
</html>

 运行主类Boot303DemoApplication.java后,再网页上访问http://localhost:8080/view

 

如果说你把ViewController中的return返回改成return "view";

重启主类,访问网址,不会报错

 因为application.properties配置文件的配置

 3.@RequestParam

(1)再controller包中创建一个ParamController类

(2)再src/main/resources/templates下创建一个html文件param.html

ParamController类 

package com.example.boot303demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
 * 描述:参数相关的测试(问号后面的参数)
 * @description
 * @author: Admin
 * @create: 2023/12/9 13:03
 */
@Controller
public class ParamController {
    @RequestMapping("/param")
    //url的链接:http://localhost:8080/param?id=100(id后面的数值可任意编写)
    public String param(@RequestParam("id") int id){
        return "param";
    }
}

param.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>你已经跳转到一个param.html的界面</div>
</body>
</html>

运行主类,访问网址:http://localhost:8080/param?id=100

 考虑一个问题:再访问网址时,如果后面不跟id会怎么样(直接报错)

解决方法:

键盘按着Ctrl键点击@RequestParam,会跳转到一个新的类,如下图

再ParamController类中修改代码

重新运行主类,再访问 http://localhost:8080/param

如下图就不会再报错了

4.@RestController和@GetMapping

@RestController不会去找页面,会把返回的内容直接在浏览器中显示

再controller包下创建一个RestFullController类

RestFullController类

package com.example.boot303demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * 描述:测试RestController相关注解
 * @description
 * @author: Admin
 * @create: 2023/12/9 14:01
 */
@RestController
@RequestMapping("rest")
public class RestFullController {
    @GetMapping("get")  //url的链接:http://localhost:8080/rest/get
    public String get(){
        return "我在这里么!";
    }
}

运行主类,输入网址:http://localhost:8080/rest/get

思考:如果想返回的是一个类,应该怎么做?

方法:

(1)在包中(com/example/boot303demo)新建一个entity包,再在entity包下新建一个User类

User类

package com.example.boot303demo.entity;

/**
 * 描述:用户
 * @description
 * @author: Admin
 * @create: 2023/12/9 14:43
 */
public class User {
    int id;
    String name;
    String Sex;
    int age;
    //无参构造方法
    public User() {
    }
    //有参构造方法
    public User(int id, String name, String sex, int age) {
        this.id = id;
        this.name = name;
        Sex = sex;
        this.age = age;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return Sex;
    }
    public void setSex(String sex) {
        Sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", Sex='" + Sex + '\'' +
                ", age=" + age +
                '}';
    }
}

RestFullController类修改

 重新运行主类,输入网址访问:http://localhost:8080/rest/get

5.@PostMapping和@DeleteMapping

(1)再RestFullController中添加一个新的方法post()

@RequestBody的用法是:如果我们需要前端把一个对象封装成json格式传给后端接收要用                                                       @RequestBody

注意:@PostMapping注释,再接口中是Post方法,不能在浏览器中访问,要不然会直接报错

如下图

想验证的话,可用接口测试工具(Postman)

如下图所示,则代表成功

思考:如果说@GetMapping和 PostMapping的后面不加路径(这样的话,路径就会一样),那么他返回的内容会不会冲突

试验:

修改RestFullController类

package com.example.boot303demo.controller;
import com.example.boot303demo.entity.User;
import org.springframework.web.bind.annotation.*;
/**
 * 描述:测试RestController相关注解
 * @description
 * @author: Admin
 * @create: 2023/12/9 14:01
 */
@RestController
@RequestMapping("rest")
public class RestFullController {
    /**
     * 查询数据
     * @return
     */
    @GetMapping  //url的链接:http://localhost:8080/rest
    public User get(){
        User user=new User(1,"张三","男",20);
        return user;
    }
    /**
     * 增加数据
     */
    @PostMapping //url的链接:http://localhost:8080/rest
    public User post(@RequestBody User user){
        System.out.println("新增的user:"+user);
        return user;
    }
}

用Postman

@PostMapping就相当于是Post方法

@GetMapping就相当于是Get方法

结论: @GetMapping和 PostMapping的后面不加路径,那么他返回的内容不会冲突

(这两个注解就相当于给他们提供了方法)

@PutMapping和@DeleteMapping同理,就不举例了

6.@ResponseBody与@CrossOrigin

(1)再ParamController.java类中新增一个方法,如下

重新运行主类,访问网址:http://localhost:8080/param/user

由此可知:@RestController与@Controller+@ResponseBody是等价的

@RestController=@Controller+@ResponseBody

(所以如果只写一个@Controller,不加@ResponseBody的话,访问该网址http://localhost:8080/param/user,就会报错,因为他会去找网址,找不到就报错)

@RequestBody的用法是:如果我们需要前端把一个对象封装成json格式传给后端接收要用                                                       @RequestBody(例子看第5点中的RestFullController类)

 @CrossOrigin是解决跨域问题的

7.@Service和@Autowired

注解备注
@Servicebean注册
@Autowired获取bean

(1)再com.example.boot303demo包下创建一个Service包

(2)再Service包下创建impl包和UserService接口

(3)再impl包下创建一个UserserviceImpl类

(4)把controller中的RestFullController复制粘贴到相同的目录下,名字换成RestFullActionController

RestFullActionController类(此时是不需要new)

package com.example.boot303demo.controller;
import com.example.boot303demo.entity.User;
import com.example.boot303demo.service.UserService;
import com.example.boot303demo.service.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 描述:测试RestController相关注解
 * @description
 * @author: Admin
 * @create: 2023/12/9 14:01
 */
@RestController
@RequestMapping("action")
public class RestFullActieonController {
    @Autowired
    private UserService userService;
    @GetMapping  //url的链接:http://localhost:8080/action
    public User get(){
        return userService.get();
    }

}

 userService接口

package com.example.boot303demo.service;

import com.example.boot303demo.entity.User;
/**
 * @description
 * @author: Admin
 * @create: 2023/12/11 13:33
 */
public interface UserService {
    public User get();
}

userServiceImpl类

package com.example.boot303demo.service.impl;
import com.example.boot303demo.entity.User;
import com.example.boot303demo.service.UserService;
import org.springframework.stereotype.Service;
/**
 * 描述:用户服务--核心逻辑
 * @description
 * @author: Admin
 * @create: 2023/12/11 13:34
 */
@Service
public class UserServiceImpl implements UserService {
    public User get(){
        User user=new User(1,"张三","男",20);
        System.out.println("UserServiceImpl user:"+user);
        return user;
    }
}

运行主类,访问网址:http://localhost:8080/action

8.@Component

注解备注
@Component注册bean
修改UserServiceImpl类,把@Service换成@Component即可

重新启动主类,访问网址:http://localhost:8080/action

9.@Atuowired,@Resource以及区别

注解备注
@Resource获取bean
修改RestFullActieonController中的@Atuowired为@Resource,重启主类即可运行

@Atuowired和@Resource的区别

@Resource=@Atuowired+@Qualifier

如果接口实现只有一个,那么用@Atuowired就可以了,也不需要指定名字。
如果接口实现有多个,那么,用@Resource,并指定name(建议)
或者使用@Atuowired+@Qualifier+Qualifier的value值

10.@Configuration,@ConfigurationProperties和@Bean

@Configuration:声明一个类为配置类,代替xml文件

@ConfigurationProperties:该注解可以将springboot的配置文件(默认必须为application.properties或application.yml)中的配置项读取到一个对象中

格式: 

@ConfigurationProperties(prefix="xxx")

prefix表示配置项的前缀

@Bean:声明在方法上,将方法的返回值加入Bean容器,代替<bean>标签

11.@value和@PropertySource

@value:属性注入

@PropertySource:指定外部属性文件

(项目完整包,可见资源绑定里,如有问题,可在评论区留言)

  • 17
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SpringBoot开发常用的注解有很多,下面我列举一些常见的注解及其作用: 1. `@SpringBootApplication`: 该注解标注在主类上,用于启动SpringBoot应用程序。它是一个复合注解,包含了`@Configuration`、`@EnableAutoConfiguration`和`@ComponentScan`三个注解的功能。 2. `@RestController`: 该注解标注在Controller类上,用于处理HTTP请求,并将返回结果直接写入HTTP响应中,通常用于构建RESTful风格的API。 3. `@RequestMapping`: 该注解用于映射HTTP请求路径到Controller的处理方法上,可以用于类级别和方法级别。通过指定请求路径、HTTP方法等属性,将请求映射到对应的方法上进行处理。 4. `@PathVariable`: 该注解用于将URL路径中的占位符参数绑定到方法的参数上。 5. `@RequestParam`: 该注解用于将HTTP请求参数绑定到方法的参数上。 6. `@RequestBody`: 该注解用于将HTTP请求体中的数据绑定到方法的参数上,通常用于接收JSON或XML格式的数据。 7. `@ResponseBody`: 该注解用于将方法的返回值直接写入HTTP响应体中,通常用于返回JSON或XML格式的数据。 8. `@Autowired`: 该注解用于自动装配Spring容器中的Bean,可以通过构造方法、属性、方法等方式进行注入。 9. `@Component`: 该注解用于标注一个类为Spring容器的Bean。 10. `@Service`: 该注解用于标注一个类为业务层的Bean,通常用于Service类。 11. `@Repository`: 该注解用于标注一个类为数据访问层的Bean,通常用于DAO类。 12. `@Configuration`: 该注解用于标注一个类为配置类,通常与`@Bean`一起使用,用于定义Bean的创建和配置。 13. `@Bean`: 该注解用于在配置类中定义一个Bean,并将其加入到Spring容器中。 这些是SpringBoot开发中常用的注解,通过合理地使用这些注解,可以简化开发过程,提高开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

布凡哦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值