一. 几种Controller注解:
@Controller | 处理http请求 |
@RestController | Spring4之后新加的注解,原来返回json需要 @ResponseBody配合@Controller |
@RequestMapping | 配合url映射 |
1. @Controller:
1.1. 该注解需要配合模板(了解即可)来使用。如下代码,这里添加springboot官方推荐的thymeleaf模板:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
但是,现在的开发方式基本是前后端分离的,Java后端只需要提供一些REST接口,返回一些json格式数据给前端即可,不用再去使用模板的方式,使用模板会给性能上带来很大的损耗,所以不推荐使用模板。
1.2. 可以将 @RequestMapping 注解的 value 属性值写成一个集合,即可响应多种请求:
@RestController
public class HelloController {
@RequestMapping(value = {"/hello","/hi"}, method = RequestMethod.GET)
public String say() {
return "Hello Spring Boot!";
}
}
上面的 say 方法可以响应 localhost:8080/hello,以及localhost:8080/hi
1.3. method属性可以不写,这样就既可响应GET请求,也可响应POST请求,但是不同请求是适应不同的业务场景的,为了安全起见,推荐加上这个属性值。
二. 参数类注解
@PathVariable | 获取url中的数据 |
@RequestParam | 获取请求参数的值 |
@GetMapping | 组合注解 |
1. @PathVariable:
该注解的相关知识和springmvc中差不多,具体可以参见:
,这里再做一遍解释:
@RestController
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(value = "/say/{id}", method = RequestMethod.GET)
public String say(@PathVariable("id") Integer id) {
return "id:"+id;
}
}
“/say/{id}”,并在say方法的参数中使用了@PathVariable注解,这样就可以获得请求URL中的占位符参数值,如图:
2. @RequestParam:
?id=123,此时可以使用@RequestParam 注解来获取传递参数的值
@RestController
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(value = "/say", method = RequestMethod.GET)
public String say(@RequestParam("id") Integer myId) {
return "id:"+myId;
}
}
如上代码所示,运行结果如下:
注意,此时如果不传id的值会报错,可以在@RequestParam注解中增加几个属性值,写成如下形式:
@RestController
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(value = "/say", method = RequestMethod.GET)
public String say(@RequestParam(value = "id",required = false,defaultValue = "0") Integer myId) {
return "id:"+myId;
}
}
设置了requird属性,标明id值是否必须要传(不写默认为true),设置defaultValue,标明默认值为“0”(String类型)
@RequestParam注解的相关知识和springmvc中差不多,具体可以参见:
3. @GetMapping:
该注解是一个组合注解,在如下场景中使用会比较简洁:
@RequestMapping(value = "/say", method = RequestMethod.GET),嫌这么写太长,麻烦?
那就换成这种写法:@GetMapping(value = "/say"),效果是一样的。
同理,还有@PostMapping,@PutMapping等等组合注解,简化书写,节省时间