1.@RequestParam
1.作用在方法传递的参数前,用于接收所传参数(是springmvc中接受普通参数的注解)
2.属性 :value 请求参数中的名称
required:请求参数中是否提供此参数,默认为true
defaultValue:指定参数的默认值
@RequestMapping("/user")
@Controller
public class QuickController {
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam("username")String username,@RequestParam(value = "age",required = false,defaultValue = "0")Integer age){
System.out.println(username +",,," + age);
return "index";
}
}
<form action="user/testRequestParam" method="post">
姓名:<input type="text" name="username"><br>
年龄:<input type="text" name="age"><br>
<input type="submit" value="testRequestParam">
</form>
输入姓名和年龄 控制台会得到所输入的姓名和年龄
2.@Controller
1.@Controller用于标记一个类,使用它标记的类就是一个springmvc Controller对象,即一个控 制器类 。Spring使用扫描机制查找所有基于注解的控制器类。它通常是和基于注解@RequestMapping的方法结合使用的。
2.该注解有个默认方法,返回类型为String类型 value的默认值为空
package org.springframework.stereotype;
@java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE})
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Documented
@org.springframework.stereotype.Component
public @interface Controller {
@org.springframework.core.annotation.AliasFor(annotation = org.springframework.stereotype.Component.class)
java.lang.String value() default "";
}
3.@RequestMapping
1.在springmvc中使用@RequestMapping来映射请求,也是通过它来指定控制器可以处理哪些URL请求。相当servlet中在web.xml的配置
2.@RequestMapping有六个属性,一般在项目中常用的有三个属性:value,method,produces
value:指定请求的实际地址
method:指定类型的请求,主要有GET,POST,PUT,DELETE,默认为GET
produces:指定返回内容类型 produces="application/json;charset=UTF-8"
@RequestMapping(value = "/user",produces="application/json;charset=UTF-8")
@Controller
public class QuickController {
@RequestMapping(value = "/testPost",method = RequestMethod.POST)
public String testPost(){
System.out.println("quickMethod running.....");
return "index";
}
}
<form action="user/testPost" method="post">
<input type="submit" value="testPost">
</form>
4.@SessionAttributes
1.可以让参数在多个请求间共享,配置需要在session中存放数据范围,@SessionAttributes只能使用在类定义上。
2.
@SessionAttributes(value = {"user"},types = {String.class})
会将model中属性名为user以及类型为String的属性添加到会话中。
@SessionAttributes(value = {"user"},types = {String.class})
@RequestMapping("/user")
@Controller
public class QuickController {
@RequestMapping("/testSessionAttribute")
public String testSessionAttribute(Map<String,Object> map){
User user = new User();
user.setName("LBJ");
user.setAge(37);
Car car = new Car();
car.setKind("aodi");
user.setCar(car);
map.put("user",user);
map.put("a","wc");
map.put("inter",new Integer(12));
return "index";
}
}
<a href="user/testSessionAttribute">testSessionAttribute</a>
request:${requestScope.user};${requestScope.a};${requestScope.inter}
<br>
session:${sessionScope.user};${sessionScope.a};${sessionScope.inter}
很明显 session没有拿到12这个值
5.@ModelAttribute
1.@ModelAttribute可以用于修饰方法和参数
用在方法上:被@ModelAttribute注释的方法会在此controller的每个方法执行前执行,可以修饰没有返回值的方法,也可修饰有具体返回值的方法。
用在参数上:会将客户端传递来的参数按名称注入到指定对象中
应用场景:当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
@RequestMapping("/user")
@Controller
public class QuickController {
@RequestMapping("/testModuleAttribute")
public String testModuleAttribute(User user){
System.out.println(user);
return "index";
}
<form action="user/testModuleAttribute" method="post">
<input type="text" name="name">
<input type="submit" value="testModuleAttribute">
</form>
此时我们只能得到名字
当我们加上@ModelAttribute
@ModelAttribute
public void test(Map<String,User> map){
System.out.println("1111");
User user = new User();
user.setName("Gurry");
user.setAge(31);
map.put("user",user);
}
输入名字的同时 可以得到名字和年龄
6.@PathVariable
1.通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的入参中:URL中的{xxx}占位符可以通过@PathVariable("xxx")绑定到方法入参中
2.@PathVariable可以接收多个参数但是无法接收对象
@RequestMapping("/user")
@Controller
public class QuickController {
@RequestMapping(value = "/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id){
System.out.println("testPathVariable running....." + id);
return "index";
}
}
<a href="user/testPathVariable/12">testPathVariable</a>
7.@ResponseBody
1.@ResponseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入response对象的body区,通常返回JSON数据或者XML数据,使用此注解不会再走视图处理器。
不加@ResponseBody注解 返回字符串需要response.getWriter.write();
@RequestMapping("/testString")
public void testString(HttpServletResponse response){
try {
response.getWriter().print("hello");
} catch (IOException e) {
e.printStackTrace();
}
}
加入@ResponseBody注解之后
@RequestMapping("/testResponsebody")
@ResponseBody
public String testResponsebody(){
return "abcdefg";
}
8.@RequestHeader
1.@RequestHeader注解用于获取请求消息头
2.属性 value:提供消息头名称 参数值为String类型
required : 是否必须有消息头,默认值为true
defaultValue:请求头变量绑定失败时的默认值
@RequestMapping("/testHead")
public String testHead(@RequestHeader(value = "Accept") String myHeader){
System.out.println("testHead");
System.out.println(myHeader);
return "index";
}
<a href="user/testHead">testHead</a>
部署成功,控制台获取了请求头的值