0%

SpringMVC详解

4 常用注解

4.1 RequestParam

为了解决 请求参数名称方法参数名称 不同的问题。可以将两个名称匹配起来。

属性:

  • value:请求参数名称。
  • required:请求参数中是否必须提供此参数。默认值:true,表示必须提供,不提供就报错。
1
2
3
4
5
@RequestMapping("/testRequestParam")
public String testServlet(@RequestParam(value="name") String username){
System.out.println(username);
return "success";
}

4.2 RequestBody

用于获取请求体内容。直接使用得到的是 key=value&key=value… 结构的数据。get请求方式没有请求体。

异步时传输 json 数据会有用。

属性:

  • required:是否必须要有请求体。默认值:true。true时 get 请求会报错,false 时 get 请求得到的是 null。
1
2
3
4
5
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
System.out.println(body);
return "success";
}

4.3 PathVariable

用于绑定 url 中的占位符。例如:请求 url 中的 /delete/{id},{id}就是占位符。

属性:

  • value:用于指定 url 中占位符名称。
  • required:时候必须提高占位符。

RESTful 风格 URL:

REST,Representational State Transfer。描述了一个架构样式的网络系统,比如 Web 应用程序。

在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple Object Access protocol,简单对象访问协议)以及XML-RPC更加简单明了,无论是对URL的处理还是对Payload的编码,REST都倾向于用更加简单轻量的方法设计和实现。值得注意的是REST并没有一个明确的标准,而更像是一种设计的风格。

1
2
3
4
5
@RequestMapping("/testPathVariable/{sid}")
public String testPathVariable(@PathVariable(value="sid") String id){
System.out.println(id);
return "success";
}

4.4 RequestHeader

用于获取请求消息头。

属性:

  • value:提供消息头名称。
  • required:是否必须有此消息头。
1
2
3
4
5
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader(value="User-Agent") String header){
System.out.println(header);
return "success";
}

4.5 CookieValue

用于获取指定 Cookie 名称的值。

属性:

  • value:提供 Cookie 名称。
  • required:是否必须有此 Cookie。
1
2
3
4
5
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value="JSESSIONID") String cv){
System.out.println(cv);
return "success";
}

4.6 ModelAttribute

可以加在方法和参数上。

出现在方法上,表示当前方法会在控制器方法之前执行。

出现在参数上,获取指定的数据给参数赋值。

属性:

  • value:用于获取数据的 key。可以是 POJO 的属性名称,也可以是 map 结构的 key。

4.7 SessionAttributes

用于多次执行控制器方法间的参数共享。

属性:

  • value:用于指定存入的属性名称。
  • type:用于指定存入的数据类型。

5 响应数据和结果视图

5.1 返回字符串

方法中,可以在 model 对象里添加属性,使得添加的属性可以在返回页面中用 EL 读到。就完成了后台取到数据传回去前端。

5.2 返回 void

如果返回 void,则方法执行完之后的跳转页面是 请求路径.jsp 。

1
2
3
4
5
6
7
8
9
10
@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception{
// 编写请求转发
request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);

// 重定向
response.sendRedirect(request.getContextPath()+"/xxx.jsp")

return;
}

5.3 返回 ModelAndView 对象

这个对象是由 SpringMVC 提供的,可以用来调整具体的 JSP 视图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 返回 ModelAndView 对象,可以传入视图的名称(即跳转的页面),还可以传入对象。
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
// 创建ModelAndView对象
ModelAndView mv = new ModelAndView();

// 模拟从数据库中查询User对象
User user = new User();
user.setUserName("name01");
user.setPassword("123456");
user.setAge(20);

// 把user对象存储到mv对象中,也会把user对象存到request对象中
mv.addObject("user",user);

// 跳转到哪个页面
mv.setViewName("success");

return mv;
}

5.4 使用关键字进行转发或重定向

在方法的返回值使用return "forward:/WEB-INF/pages/success.jsp"表明想使用请求转发。

重定向:return "redirect:/index.jsp"。这里不需要加项目名,因为框架已经帮我们做好了。