SpringMVC_[3]处理器方法的返回值

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;
    }

最后,如果有问题,希望指正,一起进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值