持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
概念
控制器:接收和处理客户端的请求,spring通过注解控制器类,加载特定的控制器。
相关注解
注解有三种:
| @Controller | 处理http请求 |
|---|---|
| @RestController | spring4之后新加的注解,原来返回json需要@ResponseBody配合@Controller |
| @RequestMapping | 配置url映射(从请求url(可能还包括请求方法、参数(pathvariable或parameter)等到控制器及对应方法的映射)) |
例子
实现一个简单的hello world程序。
代码如下:
@Controller
public class MyController {
@GetMapping("/hello")
@ResponseBody
public String hello() {
return "Hello World!";
}
}
在代码中,使用了 @Controller注解来修饰MyController,由于上一篇中启动类中使用了@SpringBootApplication注解 该注解具有@ComponentScan的功能。 因此,@Controller会被扫描并注册, 在hello方法中使用了@GetMapping与@ResponseBody注解, 以声明hello方法的访问地址及返回内容; 地址: http://localhost:8080/hello 则可以看到控制器的返回内容。
获取控制器参数
无注解下获取参数
无注解下获取参数,需要控制器层参数与HTTP请求栏参数名称一致,这样后台就可以获取到请求栏的参数。
`@RequestMapping``(``"/param/noannotation"``)`
`@ResponseBody`
`public` `Map<String, Object> noAnnotation(String name,``int` ` age, ``double` `score) {`
` `` Map<String, Object> paramMap = ``new` `HashMap<String, Object>();`
` ``paramMap.put(``"name"``, name);`
` ``paramMap.put(``"age"``, age);`
` ``paramMap.put(``"score"``, score);`
` ``return` `paramMap;`
`}`
使用@RequestParam获取参数
`@RequestMapping``(``"/param/requestparam"``)`
`@ResponseBody`
`public` `Map<String, Object> requestParam(`
` ``@RequestParam``(``"username"``) String name,`
` ``@RequestParam``(``"user_age"`` ) ``int` `age,`
` ``@RequestParam``(``"score"`` ) ``double` `score) {`
` `` Map<String, Object> paramMap = ``new` `HashMap<String, Object>();`
` ``paramMap.put(``"name"``, name);`
` ``paramMap.put(``"age"``, age);`
` ``paramMap.put(``"score"``, score);`
` ``return` `paramMap;`
`}`
传递数组
在后台控制器部分,定义数组形式接收数据,前端传递时,将一组数据用英文的逗号“,”隔开就可以了。
@RequestMapping("/param/requestarray")
@ResponseBody
public Map<String, Object> requestArray(String[] names, int[] ages, double[] scores) {
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("name", names);
paramMap.put("age", ages);
paramMap.put("score", scores);
return paramMap;
}
通过URL传递参数
这里的URL传递参数,仅需要在地址栏输入参数值,然后后台自动匹配到对应的参数名。通过使用处理器映射和@PathVariable注解的组合来获取URL参数。首先通过处理器映射可以定位参数的位置和名称,而@PathVariable则可以通过名称来获取参数。
`@RequestMapping``(``"/param/geturl/{name}/{age}/{score}"``)`
`@ResponseBody`
`public` `Map<String, Object> getUrlParam(`
` ``@PathVariable``(``"name"``) String name,`
` ``@PathVariable``(``"age"``) Integer age,`
` ``@PathVariable``(``"score"``) Double score) {`
` `` Map<String, Object> paramMap = ``new` `HashMap<String, Object>();`
` ``paramMap.put(``"name"``, name);`
` ``paramMap.put(``"age"``, age);`
` ``paramMap.put(``"score"``, score);`
` ``return` `paramMap;`
`}`