📜  Spring @Controller 注解与示例(1)

📅  最后修改于: 2023-12-03 14:47:32.370000             🧑  作者: Mango

Spring @Controller 注解与示例

@Controller 是 Spring 框架中的一个注解,用于标记 Java 类作为控制器的组件。控制器(Controller)是 MVC(Model-View-Controller)模式中的组件之一,负责处理来自用户的请求,并决定返回视图或数据给用户。

使用 @Controller 注解

要使用 @Controller 注解,您首先需要在 Spring 配置文件中启用组件扫描,以便自动检测和注册带有 @Controller 注解的类。

在 Spring Boot 项目中,组件扫描通常已经在 @SpringBootApplication 注解的主类中启用。

@SpringBootApplication
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}

然后,您可以在一个类上使用 @Controller 注解,将其标记为一个控制器。

@Controller
public class MyController {
    // 控制器方法和请求映射将在下面示例中描述
}
控制器方法和请求映射

@Controller 注解的类中的方法可以使用其他注解来映射请求路径和参数。

@Controller
public class MyController {
    
    @RequestMapping("/")
    public String home() {
        return "index"; // 返回逻辑视图名(View Name)
    }
    
    @RequestMapping(value = "/users/{id}", method = RequestMethod.GET)
    @ResponseBody
    public User getUser(@PathVariable int id) {
        return userService.getUserById(id);
    }
    
    // 其他控制器方法...
}

在上面的示例中,@RequestMapping 注解用于将 home() 方法映射到根路径 /,并返回逻辑视图名为 "index" 的视图。

另一个示例展示了如何使用 @RequestMapping 注解处理带有动态路径参数的 GET 请求。@PathVariable 注解用于从路径中提取参数。

如果您想返回数据而不是视图,可以在方法上使用 @ResponseBody 注解。这样,返回的对象将自动序列化为 JSON 或其他格式,并发送给客户端。

使用控制器处理 HTTP 请求

Spring 的 @Controller 注解是通过处理不同类型的请求来处理用户请求的。下面是一些常用的注解及其用途:

  • @RequestMapping:将 HTTP 请求映射到相应的处理器方法。
  • @GetMapping:将 GET 请求映射到相应的处理器方法。
  • @PostMapping:将 POST 请求映射到相应的处理器方法。
  • @PutMapping:将 PUT 请求映射到相应的处理器方法。
  • @DeleteMapping:将 DELETE 请求映射到相应的处理器方法。

示例

下面是一个示例,展示了如何使用 @Controller 注解和不同的请求映射注解处理不同类型的请求。

@Controller
public class MyController {
    
    @RequestMapping("/")
    public String home() {
        return "index";
    }
    
    @GetMapping("/users/{id}")
    @ResponseBody
    public User getUser(@PathVariable int id) {
        return userService.getUserById(id);
    }
    
    @PostMapping("/users")
    @ResponseBody
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }
    
    @DeleteMapping("/users/{id}")
    @ResponseBody
    public void deleteUser(@PathVariable int id) {
        userService.deleteUser(id);
    }
    
    // 其他控制器方法...
}

在上面的示例中,home() 方法将处理根路径的 GET 请求,getUser() 方法将处理带有动态路径参数的 GET 请求,createUser() 方法将处理 POST 请求,deleteUser() 方法将处理带有动态路径参数的 DELETE 请求。

总结

@Controller 注解是 Spring 框架中表示控制器的注解之一。通过使用 @Controller 注解,并结合其他注解如 @RequestMapping@GetMapping@PostMapping 等,您可以轻松地创建处理各种类型 HTTP 请求的控制器。这使得开发 Web 应用程序变得更加简单和高效。

请注意,除了 @Controller 注解外,Spring 还提供了其他类型的控制器注解,如 @RestController(用于创建返回数据的 RESTful API)和 @RequestMapping(在类级别上使用时,可以为整个控制器指定共同的请求前缀)。根据您的需求,选择适合的注解以实现最佳开发体验。

参考文档: