Spring学习笔记_34——@Controller

1. 介绍

在Spring框架中,@Controller注解是一个非常重要的组件,它用于定义一个类为Spring MVC的控制器(Controller)。这个注解会告诉Spring框架,被标注的类是一个Web控制器,并且可以处理HTTP请求。

2. 特点

  • 组件扫描@Controller注解的类会被Spring的组件扫描机制自动检测到,并注册为Spring容器中的一个Bean。这意味着你不需要在XML配置文件中手动声明这个Bean。
  • 请求映射 :通常与@RequestMapping或其变体(如@GetMapping,@PostMapping等)一起使用,以定义哪些URL应该触发控制器中的特定方法。这些注解可以放在类级别或方法级别上,用来指定请求的路径、HTTP方法等。
  • 数据绑定:控制器中的方法可以通过方法参数接收来自客户端的数据,例如表单提交的数据或URL中的参数。Spring MVC会自动将请求参数绑定到方法参数上。
  • 视图解析 :控制器方法通常返回一个逻辑视图名称,Spring会根据这个名称找到相应的视图资源来渲染页面。也可以直接返回视图对象或者使用@ResponseBody直接写出响应内容。

3. 源码

java 复制代码
/**
 * @author Arjen Poutsma
 * @author Juergen Hoeller
 * @since 2.5
 * @see Component
 * @see org.springframework.web.bind.annotation.RequestMapping
 * @see org.springframework.context.annotation.ClassPathBeanDefinitionScanner
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
    // Spring类型的属性,表示注入IOC容器时Bean的唯一标识
	@AliasFor(annotation = Component.class)
	String value() default "";

}
4. Demo
java 复制代码
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class HelloWorldController {

    @GetMapping("/hello")
    public String sayHello(@RequestParam(value = "name", required = false, defaultValue = "World") String name, Model model) {
        model.addAttribute("name", name);
        return "hello"; // 返回逻辑视图名,这里假设有一个名为 "hello" 的视图模板
    }
}
java 复制代码
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.ui.Model;

@Controller
@RequestMapping("/hello")
public class HelloController {

    @GetMapping
    public String hello(@RequestParam(value = "name", defaultValue = "World") String name, Model model) {
        model.addAttribute("name", name);
        return "hello";  // 返回视图名称,通常对应一个模板文件(如 Thymeleaf, JSP 等)
    }
}
相关推荐
2401_884810742 小时前
Spring-MVC笔记上(上)
笔记·spring·mvc
呦呦鹿鸣Rzh2 小时前
Spring MVC
java·spring·mvc
eternal__day3 小时前
Spring Boot 快速入手
java·spring boot·后端·spring·java-ee·maven
Foyo Designer5 小时前
【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的国际化:支持多语言的 RESTful API
java·spring boot·redis·后端·spring·缓存·restful
用键盘当武器的秋刀鱼7 小时前
springBoot统一响应类型3.5版本
java·spring boot·spring
栗筝i8 小时前
Spring 核心技术解析【纯干货版】- XV:Spring 网络模块 Spring-Web 模块精讲
前端·网络·spring
栗筝i10 小时前
Spring 核心技术解析【纯干货版】- XVI:Spring 网络模块 Spring-WebMvc 模块精讲
java·网络·spring
shaoweijava10 小时前
基于SpringBoot的求职招聘网站系统(源码+数据库)
java·spring boot·mysql·spring
阿里云云原生11 小时前
RAG 调优指南:Spring AI Alibaba 模块化 RAG 原理与使用
java·人工智能·spring
天上掉下来个程小白12 小时前
Redis-12.在Java中操作Redis-Spring Data Redis使用方式-操作字符串类型的数据
java·redis·spring·springboot·苍穹外卖