A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 大蓝鲸小蟀锅 于 2017-12-23 12:45 编辑

[南京校区]SpringMVC如何区分控制器返回的是页面还是数据


实际开发中我们用springmvc时,很多情况下返回值都会是string类型的,但是springmvc如何区分控制器返回的是页面还是数据

1、@ResponseBody注解作用
该注解用于将Controller方法返回的对象,通过适当的HttpMessageConverter转化为指定格式后,写入到Response对象的body数据区。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json,xml等)
需要注意的是在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据

示例代码:
@Controller   
@RequestMapping("/user")  
public class UserController {   
      
    /**
     * 返回login登陆页面
     * */  
    @RequestMapping(value="/login",method=RequestMethod.GET)   
    public String login(HttpServletRequest request){   
      
        return "login";   
    }   
      
    /**
     * 返回"loginSuccess"字符串
     * */  
    @RequestMapping(value="/loginSuccess",method=RequestMethod.GET)   
    @ResponseBody  
    public String loginSuccess(HttpServletRequest request){   
      
        return "loginSuccess";   
    }   
      
    /**
     * 返回"loginError"字符串
     * */  
    @RequestMapping(value="/loginError",method=RequestMethod.GET)   
    public @ResponseBody String loginError(HttpServletRequest request){   
      
        return "loginError";   
    }   
}
  
上面的代码中:
login方法返回login登陆页面
loginSuccess方法返回字符串"loginSuccess"
loginError方法返回字符串"loginError"
三个方法的返回对象都是String类型的,SpringMVC框架是如何区分返回的是页面还是字符串呢?这就是@ResponseBody注解的作用了

2springmvc 除了支持string还支持的返回方式:ModelAndView,Model,Map,void

Map
@RequestMapping("/demo2/show")
public Map<String, String> getMap() {
    Map<String, String> map = new HashMap<String, String>();
    map.put("key1", "value-1");
    map.put("key2", "value-2");
    return map;
}
jsp页面中可直通过${key1}获得到值, map.put()相当于request.setAttribute方法。
void
如果返回值为空,则响应的视图页面对应为访问地址
@RequestMapping("/index")
public void index() {
   return;
}
对应的逻辑视图名为"index"

3、小结:
1使用 String 作为请求处理方法的返回值类型是比较通用的方法,这样返回的逻辑视图名不会和请求 URL 绑定,具有很大的灵活性,而模型数据又可以通过 ModelMap 控制。
2使用void,map,Model 时,返回对应的逻辑视图名称真实url为:prefix前缀+视图名称 +suffix后缀组成。
3使用String,ModelAndView返回视图名称可以不受请求的url绑定,ModelAndView可以设置返回的视图名称。

—— @author lei.s


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马