文章目录
SpringMVC执行原理图
各组件的详细说明可参考这篇文章:SpringMVC组件概述
SpringMVC常用注解
@Controller
注解在类上,表明这个类是Spring MVC里的Controller,将其声明为Spring的一个Bean,Dispatcher Servlet会自动扫描注解了此注解的类,并将Web请求映射到注解了
@RequestMapping
的方法上,需要注意的是,在Spring MVC声明控制器Bean的时候,只能使用@Controller
。
@RequestMapping
@RequestMapping
注解用来映射Web请求(访问路径和参数)、处理类和方法。它可以注解在类和方法上。注解在方法上的@RequestMapping
路径会继承注解在类上的路径,@RequestMapping
支持Servlet的request和response作为参数,也支持对它们的媒体类型进行配置。
@Controller // 声明此类是一个控制器
@RequestMapping("/anno") // 映射此类的访问路径是 /anno
public class DemoAnnoController {}
@ResponseBody
@ResponseBody
支持将返回值放在response体内,而不是返回一个页面。Ajax的异步访问程序,可以以此注解返回数据而不是返回页面;此注解可以放在返回值或者方法上。
@RequestMapping("/index")
@ResponseBody
public String index(HttpServletRequest request, HttpServletResponse response) {
return "url: " + request.getRequestURL() + " can access";
}
@RequestBody
@RequestBody
允许request的参数在request体中,而不是在直接链接在地址后面。此注解放在参数前。
@RequestBody
的作用其实是将json格式的数据转为java对象。
// 前端
$.ajax({
data:{ "username":"tom", "address":"北京" }
})
// 后端
@RequestMapping("/insert")
public void insert(@RequestBody User user) {}
@PathVariable
@PathVariable
用来接收路径参数,如 /news/001,可接收001作为参数。此注解放置在参数前。
@RequestMapping("/show/{id}/{name}")
public String show(@PathVariable("id") Long ids, @PathVariable("name") String names) {
return "hello";
}
@RestController
@RestController
是一个组合注解,组合了@Controller
和@ResponseBody
,意味着当开发一个只和页面交互数据的控制的时候,可以使用此注解。
若没有此注解,要想实现上述功能,则需在代码中加上@Controller
和@ResponseBody
两个注解。