SpringMVC在java框架中有着独特的地位,关于方法的返回值类型,你知道几种呢?
1.ModelAndView
ModelAndView可以返回数据和视图,
@RequestMapping(value="/test")
public ModelAndView login1(User user) {
//创建视图模型对象 该对象中既包含了模型数据 又包含了视图名称
ModelAndView mv = new ModelAndView();
mv.setViewName("success");//设置相应视图的名字
///添加模型数据, 各种类型都可以
mv.addObject(user);
mv.addObject("hello", "你好");
return mv; //返回视图模型对象
}
----jsp页面
<body>
访问成功<br>
${hello }, ${user.username }<br>
${user }
</body>
2.String
两种情况:
1>return "user":将请求转发到user视图
2>return "redirect:user":将请求重定向到user地址
需要注意的是:WEB-INF下的文件是受保护的,重定向无法访问(包404)。
//指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/itemList.jsp
return "itemList";
@RequestMapping("updateItem")
public String updateItemById(Item item) {
// 更新商品
this.itemService.updateItemById(item);
// 修改商品成功后,重定向到商品编辑页面
// 重定向后浏览器地址栏变更为重定向的地址,
// 重定向相当于执行了新的request和response,所以之前的请求参数都会丢失
// 如果要指定请求参数,需要在重定向的url后面添加 ?itemId=1 这样的请求参数
return "redirect:/itemEdit.action?itemId=" + item.getId();
}
@RequestMapping("updateItem")
public String updateItemById(Item item) {
// 更新商品
this.itemService.updateItemById(item);
// 修改商品成功后,继续执行另一个方法
// 使用转发的方式实现。转发后浏览器地址栏还是原来的请求地址,
// 转发并没有执行新的request和response,所以之前的请求参数都存在
return "forward:/itemEdit.action";
}
3.Object
返回对象,一般用于json数据的返回。需要在方法前或方法返回值前添加@ResponseBody注解
/*查询所有商品*/
@RequestMapping("/prodects")
@ResponseBody
public Object getprodect(){
List<Product> products = userService.getproduct();
return products;
}
4.Void
返回其他的MIME类型时,通常需要将方法定义为void。
//在Controller方法形参上可以定义request和response,使用request或response指定响应结果
1、使用request转发页面,如下:
request.getRequestDispatcher("页面路径").forward(request, response);
request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);
2、可以通过response页面重定向:
response.sendRedirect("url")
response.sendRedirect("/springmvc-web2/itemEdit.action");
3、可以通过response指定响应结果,例如响应json数据如下:
response.getWriter().print("{\"abc\":123}");
在使用时根据情况选择最适合的返回值类型。