SpringBoot的Controller中经常会用到注解@Controller、@RestController、@RequestMapping、@RequestParam、@PathVariable、@RequestBody等,以下针对这些注解简单使用。
1.@Controller
@Controller 定义了一个控制器类,它需要配合使用@RequestMapping 注解的方法才是真正处理请求的处理器。
使用此注解返回的不是Json数据,而是页面类数据。
例如:
先在pom.xml中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
然后在resources目录下新建templates目录,并且在templates目录下创建hello.html文件。
最后创建HelloController
@Controller
@RequestMapping("/test")
public class HelloController {
@RequestMapping(value = "/hello")
public String sayHello() {
System.out.println("hello world");
return "hello";
}
}
启动服务,访问localhost:8080/test/hello,页面跳转到hello.html页面。
2.@RestController
使用@RestController注解的方法表示一个控制器,返回json。原来返回一个json需要@Controller和@RequestBody配合使用。
例如:
@RestController
@RequestMapping("/jdbc")
public class JdbcController {
@Autowired
JdbcTemplate jdbcTemplate;
@RequestMapping("/select")//http://localhost:8080/jdbc/select?memberNo=20211123146
public List<Map<String,Object>> memberList1(@RequestParam("memberNo") String memberNo){
String sql="select * from member tdmi where tdmi.member_no='"+memberNo+"'";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
return maps;
}
}
启动服务,访问http://localhost:8080/jdbc/select?memberNo=20211123146,返回:
[
{
"member_id": 5,
"shop_id": 9730231,
"member_no": "20211123146",
"mobile": "18727460505",
"open_id": "#zssyd4U4J3p+czzXkwg+ZQ=="
}
]
3.@RequestMapping
@RequestMapping可以使用在类上,也可以使用在方法上。
而@GetMapping/@PostMapping 其实就是@RequestMapping和Get/Post的集合
@GetMapping(value = “hello”) 等价于@RequestMapping(value = “hello”, method = RequestMethod.GET)
@PostMapping(value = “hello”) 等价于@RequestMapping(value = “hello”, method = RequestMethod.POST)
4.@RequestParam
@RequestParam用于获取查询参数。格式为:url?name=AAA
例如:
@RestController
@RequestMapping("/jdbc")
public class JdbcController {
@Autowired
JdbcTemplate jdbcTemplate;
@GetMapping("/select")
public List<Map<String,Object>> memberQuery(@RequestParam("memberNo") String memberNo){
String sql="select * from member tdmi where tdmi.member_no='"+memberNo+"'";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
return maps;
}
}
启动服务,访问http://localhost:8080/jdbc/select?memberNo=20211123146 即可。
5.@PathVariable
通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。即获取路径参数。格式为:url/{id}
例如:
@PostMapping("/select/{memberNo}")
public List<Map<String,Object>> memberList2(@PathVariable("memberNo") String memberNo){
String sql="select * from member tdmi where tdmi.member_no='"+memberNo+"'";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
return maps;
}
启动服务,访问 http://localhost:8080/jdbc/select/20211123146 即可。
6.@RequestBody
@RequestBody传递的需要是对象
示例1:
@PostMapping("/memberPost1")
public Member paramTest1(@RequestBody Member member){
System.out.println(member);
return member;
}
启动服务,使用postman访问 http://localhost:8080/jdbc/memberPost1即可。查看控制台输出:
Member(memberId=5, shopId=9730231, memberNo=20211123146, mobile=18727460505, openId=#zssyd4U4J3p+czzXkwg+ZQ==)

示例2:
@PostMapping("/memberPost2")//http://localhost:8080/jdbc/memberPost2
public Map<String,Object> paramTest2(@RequestBody Map<String,Object> member){
System.out.println(member);
return member;
}
启动服务,使用postman访问 http://localhost:8080/jdbc/memberPost2即可

示例3:不使用注解
@PostMapping("/memberPost3")//http://localhost:8080/jdbc/memberPost3
public List<Member> paramTest3(Member member){
System.out.println(member);
List<Member> list = new ArrayList<>();
list.add(member);
return list;
}
启动服务,使用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中,即请求体中。
网友评论