Spring Boot 控制器

115 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

概念

控制器:接收和处理客户端的请求,spring通过注解控制器类,加载特定的控制器。

相关注解

注解有三种:

@Controller处理http请求
@RestControllerspring4之后新加的注解,原来返回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;`

`}`