SpringBoot的Controller中经常会用到注解@Controller、@RestController、@RequestMapping、@RequestParam、@PathVariable、@RequestBody等,以下针对这些注解简单使用。
@Controller 定义了一个控制器类,它需要配合使用@RequestMapping 注解的方法才是真正处理请求的处理器。
使用此注解返回的不是Json数据,而是页面类数据。
例如:
先在pom.xml中添加依赖
然后在resources目录下新建templates目录,并且在templates目录下创建hello.html文件。
最后创建HelloController
启动服务,访问localhost:8080/test/hello,页面跳转到hello.html页面。
使用@RestController注解的方法表示一个控制器,返回json。原来返回一个json需要@Controller和@RequestBody配合使用。
例如:
启动服务,访问
http://localhost:8080/jdbc/select?memberNo=20211123146 ,返回:
@RequestMapping可以使用在类上,也可以使用在方法上。
而@GetMapping/@PostMapping 其实就是@RequestMapping和Get/Post的集合
@GetMapping(value = “hello”) 等价于@RequestMapping(value = “hello”, method = RequestMethod.GET)
@PostMapping(value = “hello”) 等价于@RequestMapping(value = “hello”, method = RequestMethod.POST )
@RequestParam用于获取查询参数。格式为:url?name=AAA
例如:
启动服务,访问
http://localhost:8080/jdbc/select?memberNo=20211123146 即可。
通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。即获取路径参数。格式为:url/{id}
例如:
启动服务,访问
http://localhost:8080/jdbc/select/20211123146 即可。
@RequestBody传递的需要是对象
示例1:
启动服务,使用postman访问
http://localhost:8080/jdbc/memberPost1 即可。查看控制台输出:
Member(memberId=5, shopId=9730231, memberNo=20211123146, mobile=18727460505, openId=#zssyd4U4J3p+czzXkwg+ZQ==)
示例2:
启动服务,使用postman访问
http://localhost:8080/jdbc/memberPost2 即可
示例3:不使用注解
启动服务,使用postman访问
http://localhost:8080/jdbc/memberPost3 ,并在postman的form-data中分别传入key-value
总结:
如果要在Controller层返回一个页面,用注解@Controller;如果让其作为一个接口,用@RestController
在GET请求中(@GetMapping),不能使用@RequestBody。
在POST请求(@PostMapping),可以使用@RequestBody和@RequestParam
@RequestParam注解接受的参数来源于url中,格式为xxx?username=aa&password=456,而@RequestBody注解接收的参数则是来自于requestBody中,即请求体中。