本文只涉及在Restful风格下的注解
首先,需要了解的是SpringMVC三层架构,这三层分别是控制器层(Controller Layer),服务层(Service Layer),数据访问层(Data Access Layer)。
-
表现层(Presentation Layer):表示层负责接收用户的请求和显示响应的结果。在Spring MVC中,表现层由控制器(Controller)实现,它们负责处理HTTP请求、调用业务逻辑,并将结果返回给客户端。
-
业务逻辑层(Business Logic Layer):业务逻辑层负责实现应用程序的业务逻辑,并处理表示层传递过来的请求。在Spring MVC中,业务逻辑层通常表示为服务层(Service Layer),它们处理业务逻辑、调用数据访问层(Data Access Layer),并对数据进行处理和转换。
-
数据访问层(Data Access Layer):数据访问层负责与数据库或其他数据存储进行交互,执行CRUD(创建、读取、更新、删除)操作。在Spring MVC中,数据访问层通常表示为数据访问对象(Data Access Object,DAO),它们实现数据的持久化和检索。
其次,在Spring Boot中,常见的用于构建RESTful风格的API的注解包括:
{
- @RestController:用于标识一个类是RESTful控制器,它集合了@Controller和@ResponseBody的功能。
- @RequestMapping:用于指定处理请求的URL路径。
@RestController @RequestMapping("/api") public class UserController { // 控制器方法 } - @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) { // 处理删除用户的逻辑 } - @PathVariable:用于绑定请求路径中的变量到方法参数。
@RequestMapping("/users/{id}") public User getUserById(@PathVariable("id") Long id) { // 处理获取特定用户的逻辑 } - @RequestParam:用于绑定请求参数到方法参数。
@RequestParam注解的常用属性如下:
}
-
value:参数的名称,可以通过该属性指定参数在请求中的名字。例如:@RequestParam(value = "id")。
-
required:指定参数是否是必需的,默认值为true。如果设置为true,但请求中没有该参数,则会抛出异常;如果设置为false,但请求中没有该参数,则参数值将为null。例如:@RequestParam(value = "id", required = false)。
-
defaultValue:指定参数的默认值,在请求中没有该参数时使用。例如:@RequestParam(value = "page", defaultValue = "1")。
-
name:参数的名称,与value属性作用相同,用于指定参数在请求中的名字。例如:@RequestParam(name = "id")。
- @RequestBody:用于绑定请求体中的数据到方法参数。
@PostMapping("/users") public User createUser(@RequestBody User user) { // 处理创建用户的逻辑 } - @RequestHeader:用于绑定请求头中的数据到方法参数。
- @ResponseBody:用于将方法返回的对象转换为指定的格式(如JSON或XML)作为响应体返回。
- @ResponseStatus:用于指定响应的状态码。
@GetMapping("/users/{id}") @ResponseStatus(HttpStatus.OK) public User getUserById(@PathVariable("id") Long id) { User user = userService.getUserById(id); return user; } - @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; } }
注解其中的底层逻辑:
-
Spring Boot内部使用了Spring MVC来实现RESTful风格的API。当收到一个HTTP请求时,Spring Boot通过DispatcherServlet来进行处理。
-
根据@RequestMapping等注解的配置,DispatcherServlet会将请求转发给对应的控制器方法。
-
控制器方法中的参数由注解来进行绑定,包括请求路径中的变量、请求参数、请求体等。
-
控制器方法执行后,返回的数据会经过@ResponseBody注解的处理,转换为指定格式的数据。
-
最后,DispatcherServlet将响应数据返回给客户端。
在MVC各层中各使用什么注解呢?
-
控制器层(Controller Layer):@RestController、@RequestMapping、@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PathVariable、@RequestParam、@RequestBody、@RequestHeader、@ResponseBody、@ResponseStatus等注解用于定义和处理请求的控制器类和方法。
-
服务层(Service Layer):@Autowired注解和@Service注解,主要负责业务逻辑的处理和数据的操作。
@Service public class OrderService { @Autowired private UserService userService; // 服务层逻辑 } -
数据访问层(Data Access Layer):@Mapper注解是MyBatis框架中的注解,用于标识一个接口是数据访问层的映射器(Mapper)。这个接口定义了与数据库交互的方法,MyBatis会根据方法的定义自动生成相应的SQL语句。主要负责与数据库或其他持久化存储进行交互。
@Mapper public interface UserDao { // 数据访问层方法 }
总体来说,Spring Boot的底层逻辑是通过使用Spring MVC来实现RESTful风格的API,通过注解在控制器方法中绑定请求参数和处理响应数据,并使用DispatcherServlet来处理请求和返回响应。
2433

被折叠的 条评论
为什么被折叠?



