SpringBoot 里的常见注解,及使用方法,还有底层逻辑

        本文只涉及在Restful风格下的注解

        首先,需要了解的是SpringMVC三层架构,这三层分别是控制器层(Controller Layer),服务层(Service Layer),数据访问层(Data Access Layer)。

  1. 表现层(Presentation Layer):表示层负责接收用户的请求和显示响应的结果。在Spring MVC中,表现层由控制器(Controller)实现,它们负责处理HTTP请求、调用业务逻辑,并将结果返回给客户端。

  2. 业务逻辑层(Business Logic Layer):业务逻辑层负责实现应用程序的业务逻辑,并处理表示层传递过来的请求。在Spring MVC中,业务逻辑层通常表示为服务层(Service Layer),它们处理业务逻辑、调用数据访问层(Data Access Layer),并对数据进行处理和转换。

  3. 数据访问层(Data Access Layer):数据访问层负责与数据库或其他数据存储进行交互,执行CRUD(创建、读取、更新、删除)操作。在Spring MVC中,数据访问层通常表示为数据访问对象(Data Access Object,DAO),它们实现数据的持久化和检索。

        

其次,在Spring Boot中,常见的用于构建RESTful风格的API的注解包括:

{

  1. @RestController:用于标识一个类是RESTful控制器,它集合了@Controller和@ResponseBody的功能。
  2. @RequestMapping:用于指定处理请求的URL路径。
    @RestController
    @RequestMapping("/api")
    public class UserController {
        // 控制器方法
    }
  3. @GetMapping、@PostMapping、@PutMapping、@DeleteMapping:分别用于处理GET、POST、PUT、DELETE请求。它们是@RequestMapping的缩写版本。
    @GetMapping("/users")
    public List<User> getAllUsers() {
        // 处理获取所有用户的逻辑
    }
    
    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        // 处理创建用户的逻辑
    }
    
    @PutMapping("/users/{id}")
    public User updateUser(@PathVariable("id") Long id, @RequestBody User user) {
        // 处理更新用户的逻辑
    }
    
    @DeleteMapping("/users/{id}")
    public void deleteUser(@PathVariable("id") Long id) {
        // 处理删除用户的逻辑
    }
  4. @PathVariable:用于绑定请求路径中的变量到方法参数。
    @RequestMapping("/users/{id}")
    public User getUserById(@PathVariable("id") Long id) {
        // 处理获取特定用户的逻辑
    }
  5. @RequestParam:用于绑定请求参数到方法参数。

@RequestParam注解的常用属性如下:

}

  1. value:参数的名称,可以通过该属性指定参数在请求中的名字。例如:@RequestParam(value = "id")。

  2. required:指定参数是否是必需的,默认值为true。如果设置为true,但请求中没有该参数,则会抛出异常;如果设置为false,但请求中没有该参数,则参数值将为null。例如:@RequestParam(value = "id", required = false)。

  3. defaultValue:指定参数的默认值,在请求中没有该参数时使用。例如:@RequestParam(value = "page", defaultValue = "1")。

  4. name:参数的名称,与value属性作用相同,用于指定参数在请求中的名字。例如:@RequestParam(name = "id")。

  5. @RequestBody:用于绑定请求体中的数据到方法参数。
    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        // 处理创建用户的逻辑
    }
  6. @RequestHeader:用于绑定请求头中的数据到方法参数。
  7. @ResponseBody:用于将方法返回的对象转换为指定的格式(如JSON或XML)作为响应体返回。
  8. @ResponseStatus:用于指定响应的状态码。
    @GetMapping("/users/{id}")
    @ResponseStatus(HttpStatus.OK)
    public User getUserById(@PathVariable("id") Long id) {
        User user = userService.getUserById(id);
        return user;
    }
  9. @ControllerAdvice:用于定义全局异常处理。
    @ControllerAdvice
    public class GlobalExceptionHandler {
    
        @ExceptionHandler(Exception.class)
        @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
        public ErrorResponse handleException(Exception ex) {
            ErrorResponse errorResponse = new ErrorResponse();
            errorResponse.setMessage("Internal Server Error");
            errorResponse.setErrorCode(500);
            return errorResponse;
        }
    }

注解其中的底层逻辑:

  1. Spring Boot内部使用了Spring MVC来实现RESTful风格的API。当收到一个HTTP请求时,Spring Boot通过DispatcherServlet来进行处理。

  2. 根据@RequestMapping等注解的配置,DispatcherServlet会将请求转发给对应的控制器方法。

  3. 控制器方法中的参数由注解来进行绑定,包括请求路径中的变量、请求参数、请求体等。

  4. 控制器方法执行后,返回的数据会经过@ResponseBody注解的处理,转换为指定格式的数据。

  5. 最后,DispatcherServlet将响应数据返回给客户端。

在MVC各层中各使用什么注解呢?

  1. 控制器层(Controller Layer):@RestController、@RequestMapping、@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PathVariable、@RequestParam、@RequestBody、@RequestHeader、@ResponseBody、@ResponseStatus等注解用于定义和处理请求的控制器类和方法。

  2. 服务层(Service Layer):@Autowired注解和@Service注解,主要负责业务逻辑的处理和数据的操作。

    @Service
    public class OrderService {
        
        @Autowired
        private UserService userService;
        
        // 服务层逻辑
    }
  3. 数据访问层(Data Access Layer):@Mapper注解是MyBatis框架中的注解,用于标识一个接口是数据访问层的映射器(Mapper)。这个接口定义了与数据库交互的方法,MyBatis会根据方法的定义自动生成相应的SQL语句。主要负责与数据库或其他持久化存储进行交互。

    @Mapper
    public interface UserDao {
        // 数据访问层方法
    }

总体来说,Spring Boot的底层逻辑是通过使用Spring MVC来实现RESTful风格的API,通过注解在控制器方法中绑定请求参数和处理响应数据,并使用DispatcherServlet来处理请求和返回响应。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值