java Spring-MVC之Controller注解
1.Controlller简介
Controller是MVC模式中的控制层,主要用来处理浏览器的访问请求,在编写类时在类上加上@Controller注解表明这是一个控制器。
2.Controller中常用的注解
2.1.@RequestMapping注解
- 可以标明在类上也可以标明在方法上
@RequestMapping(value = "getUser/{name}",method = RequestMethod.POST)
@RequestMapping("/getOneInt")
- 该注解有两个常用的属性,value表示访问路径,method表示请求的方法,不指定method时,任何形式的访问请求都可以接受。
2.2 @GetMapping与注解@PostMapping
- @GetMapping(“getUser”)与@RequestMapping(value = “getUser”,method = RequestMethod.GET)是一样的
- @PostMapping(“getUser”)与@RequestMapping(value = “getUser”,method = RequestMethod.POST)是一样的
- 当然还有@DeleteMapping @PatchMapping等注解,对应各种访问方式
2.3 @RequestParam注解
-
@RequestParam是用来标注方法参数的,下面第一种和第二种是一样的,浏览器访问提供的参数名字应该与name一致,但是当该注解设置了value属性时,参数名字应当与设置的值na一样。required表示该参数是否必传,默认是false,当为true时,没有传将报错。
-
注意:用@RequestParam标记参数,浏览器访问的参数是拼接在url之后的。
@GetMapping("getOneInt1")
public String getOne1(@RequestParam String name){
return "int,"+name;
}
@GetMapping("getOneInt1")
public String getOne1(String name){
return "int,"+name;
}
@GetMapping("getOneInt1")
public String getOne1(@RequestParam(value = "na",required= "false") String name){
return "int,"+name;
}
2.4 @RequestBody注解
- @RequestBody也是用来标注访问参数的,该参数必须是一个自定义的类。只是与 @RequestParam不同的时,该参数是保存在请求体中的json格式,采用url拼接的访问方式是行不通的。json格式的参数名必须与类中的属性保持一致,且类型能转换为类中的属性的类型。
public class Param1 {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
public String getOne1(@RequestBody Param1 param1){
System.out.println(param1);
return "int,"+param1.getName();
}
2.5 @PathVariable注解
- @PathVariable也是用来修饰方法参数的,表明该参数是写在浏览器访问url中的。
@RequestMapping(value = "getUser/{name}")
public String getUser(@PathVariable String name){
return " hello PathVariable,"+name;
}
2.6 @ResponseBody注解
- 正常情况下,Controller返回的是模型视图
- @ResponseBody可声明在类上,也可声明在方法上,表明方法的返回类型为json格式,不再返回视图。
- 注意:当返回类型为实体类时,该类需要 implements Serializable。
@RequestMapping("/getOneInt")
@ResponseBody
public String getOne2(int n){
return "int,"+n;
}
2.7 @RestController注解
- 是一个REST风格的注解,其作用相当于@Controller与@ResponseBody的联合使用,类中所有方法返回的类型均为json格式。使用此注解后,方法上的@ResponseBody注解可以去掉了。
Controller与@ResponseBody的联合使用,类中所有方法返回的类型均为json格式。使用此注解后,方法上的@ResponseBody注解可以去掉了。