题目
Spring MVC中如何定义一个简单的控制器并处理GET请求?
信息
- 类型:问答
- 难度:⭐
考点
控制器定义,请求映射,视图解析
快速回答
在Spring MVC中处理GET请求的基本步骤:
- 使用
@Controller注解标记控制器类 - 使用
@GetMapping注解定义处理GET请求的方法 - 返回视图名称字符串(会被视图解析器解析)
- 通过方法参数接收请求参数(可选)
原理说明
Spring MVC的核心是前端控制器模式:DispatcherServlet接收所有请求,根据@Controller注解和@GetMapping等映射注解将请求路由到对应的处理方法。视图解析器(如InternalResourceViewResolver)将返回的字符串解析为实际视图(如JSP)。
代码示例
@Controller // 1. 声明为控制器
public class WelcomeController {
// 2. 映射GET请求
@GetMapping("/welcome")
public String welcome(
// 3. 获取请求参数(可选)
@RequestParam(name = "name", defaultValue = "Guest") String name,
Model model) {
// 4. 向模型添加数据
model.addAttribute("username", name);
// 5. 返回视图名称
return "welcome-page";
}
}组件说明
- @Controller:标记类为控制器,自动被组件扫描发现
- @GetMapping:指定处理HTTP GET请求的路径
- @RequestParam:绑定请求参数到方法参数
- Model对象:用于向视图传递数据
视图配置示例(application.properties)
# 视图解析器配置
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp此时返回的"welcome-page"会解析为/WEB-INF/views/welcome-page.jsp
最佳实践
- 保持控制器方法简洁,业务逻辑委托给Service层
- 使用
@GetMapping等专用注解代替通用@RequestMapping(method = RequestMethod.GET) - 为
@RequestParam设置defaultValue避免空值异常
常见错误
- 忘记添加
@Controller注解导致控制器未被识别 - URL路径冲突(多个方法映射相同路径)
- 视图名称拼写错误导致找不到模板文件
- 未配置视图解析器导致返回字符串被直接输出
扩展知识
- 其他映射注解:
@PostMapping,@PutMapping,@DeleteMapping - 路径变量:使用
@PathVariable获取RESTful风格参数(如/users/{id}) - 重定向:返回
"redirect:/new-path"实现重定向 - 响应体:使用
@ResponseBody直接返回JSON数据