题目
Spring MVC中如何创建控制器并处理GET请求
信息
- 类型:问答
- 难度:⭐
考点
控制器创建,请求映射,模型数据传递
快速回答
在Spring MVC中创建控制器处理GET请求的基本步骤:
- 使用
@Controller注解标记控制器类 - 使用
@GetMapping注解定义处理GET请求的方法 - 通过方法参数注入
Model对象传递数据到视图 - 返回视图名称字符串(如Thymeleaf模板名)
原理说明
Spring MVC采用前端控制器模式,DispatcherServlet接收HTTP请求后,根据@Controller和@GetMapping的映射关系将请求路由到对应方法。控制器方法处理请求后,通过Model添加数据,返回的视图名称由视图解析器转换为实际视图。
代码示例
@Controller
public class ProductController {
// 处理 /products 的GET请求
@GetMapping("/products")
public String listProducts(Model model) {
// 模拟数据获取
List<String> products = Arrays.asList("Laptop", "Phone", "Tablet");
// 添加数据到模型
model.addAttribute("productList", products);
// 返回视图名称(对应src/main/resources/templates/product-list.html)
return "product-list";
}
}最佳实践
- 语义化URL:使用名词复数形式(如
/products)表示资源集合 - 明确请求方法:优先使用
@GetMapping而非通用@RequestMapping - 模型命名:属性名使用小写驼峰格式(如
productList) - 视图组织:将HTML模板放在
src/main/resources/templates/目录
常见错误
- 缺少注解:忘记添加
@Controller导致类不被扫描 - 路径冲突:多个方法映射相同URL路径引发异常
- 视图解析失败:未配置模板引擎(如Thymeleaf)或视图名称拼写错误
- 模型数据未传递:在方法内创建
new Model()而非使用参数注入
扩展知识
- 其他映射注解:
@PostMapping,@PutMapping,@DeleteMapping对应不同HTTP方法 - 路径变量:使用
@GetMapping("/products/{id}")和@PathVariable获取URL参数 - 请求参数:通过
@RequestParam获取查询参数(如?category=electronics) - 重定向:返回
"redirect:/new-path"实现页面跳转