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注解可以去掉了。
注意:浏览器访问时,url中的参数是不分类型的,但是Controller中方法的参数是有类型的,因此必须保证传过来的参数能转换为接受的参数类型。url中的参数可以多于接收的,但必须包含方法的接收参数且名字一致。