SpringMVC_[3]处理器方法的返回值
- 1 处理器方法的返回值
- 1.1 返回ModelAndView
- 1.2 返回String
- 1.3 返回对象类型
- 1.3.1 返回基础类型
- 1.3.2 返回自定义对象类型
- 1.3.3 返回集合List
- 1.3.4 返回集合Map
1 处理器方法的返回值
使用@Controller 注解的处理器的处理器方法,其返回值常用的有四种类型:
1. ModelAndView
2. String
3. 返回自定义类型对象
4. 无返回值 void
选择哪种返回值要根据自己所做功能来选择
1.1 返回ModelAndView
如果是前后端不分的开发,大部分情况下,我们返回 ModelAndView,即数据模型+视图
mv.setViewName(“result”);
//1、返回值是ModelAndView: 这种方式既有数据的携带还有资源的跳转,可以选择该种方式
@RequestMapping("test01") public ModelAndView test01(){ ModelAndView mv=new ModelAndView();//模型与视图
//携带数据
mv.addObject("teamName","湖人队");
//相当于request,setAttribute("teamName","湖人队“);
mv.setViewName("result");// 经过视图解析器InternalResourceViewResolver的处 理,将逻辑视图名称加上前后缀变为物理资源路径 /jsp/result.jsp
return mv;
}
Model 中,放我们的数据,然后在 ModelAndView 中指定视图名称。
1.2 返回String
上一种方式中的 ModelAndView 可以拆分为两部分,Model 和 View,在 SpringMVC 中,Model 我们可以直接在参数中指定,然后返回值是逻辑视图名,视图解析器解析可以将逻辑视图名称转换为物理视图地址。
视图解析器通过内部资源视图解析器InternalResourceViewResolver将字符串与解析器中的prefix和suffix结合形成要跳转的额URI。
//2、返回字符串
@RequestMapping("test02")
public String test02(HttpServletRequest request){
Team team=new Team();
team.setLocation("迈阿密");
team.setTeamId(1002);
team.setTeamName("热火");
//携带数据的两种方式
request.setAttribute("team",team);
request.getSession().setAttribute("team",team);
//资源的跳转
return "result";// 经过视图解析器InternalResourceViewResolver的处理,将逻辑视 图名称加上前后缀变为物理资源路径 /jsp/result.jsp
}
1.3 返回对象类型
当处理器方法返回Object对象类型的时候,可以是Integer、String、Map、List,也可以是自定义的对象类型。但是无论是什么类型,都不是作为逻辑视图出现,而是直接作为数据返回然后展示的。一般前端发起Ajax请求的时候都会使用直接返回对象的形式。
返回对象的时候,需要使用 @ResponseBody 注解,将转换后的 JSON 数据放入到响应体中。
返回json类型的数据,需要添加相应的依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
1.3.1 返回基础类型
// 一定要加@ResponseBody
@ResponseBody
@RequestMapping("test03-1")
public Integer test031() {
return 666;
}
@ResponseBody
@RequestMapping("test03-2")
public String test032() {
return "test";
}
1.3.2 返回自定义对象类型
@ResponseBody
@RequestMapping("test03-3")
public Team test033() {
Team team = new Team();
team.setLocation("迈阿密");
team.setTeamId(1002);
team.setTeamName("热火");
return team;
}
1.3.3 返回集合List
@ResponseBody
@RequestMapping("test03-4")
public List<Team> test034() {
List<Team> list = new ArrayList<>(5);
for (int i = 1; i <= 5; i++) {
Team team = new Team();
team.setLocation("迈阿密" + i);
team.setTeamId(1002 + i);
team.setTeamName("热火" + i);
list.add(team);
}
return list;
}
1.3.4 返回集合Map
@ResponseBody
@RequestMapping("test03-5")
public Map<String, Team> test035() {
Map<String, Team> map = new HashMap();
for (int i = 1; i <= 5; i++) {
Team team = new Team();
team.setLocation("金州" + i);
team.setTeamId(1000 + i);
team.setTeamName("勇士" + i);
//日期类型,在返回的时候是个数字,如果想要按日期格式展示需要在实体类对应属性添加注 解@JsonFormat(pattern = "yyyy-MM-dd")
team.setCreateTime(new Date());
map.put(team.getTeamId() + "", team);
}
return map;
}
最后,如果有问题,希望指正,一起进步。