学完Servlet之后在学SpringMVC,我发现挺容易的,无外乎就是接收和返回参数的形式是不一样的。
上一篇博客说了controller如何接收参数,那么这篇博客主要说controller如何返回数据。
其返回数据的类型基本由四种:
- ModelAndView
- String
- void
- 自定义类型
第一种类型:ModelAndView
返回的类型的意思是说:你把要返回的数据和要返回的界面名称都给ModelAndView,都让它带回去
如何添加数据和界面呢?
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView md = new ModelAndView();
md.addObject("hello","Hello,SpringMVC");
md.setViewName("first");
return md;
}
第二种类型:String
这种类型的是说要返回的界面的名称
@RequestMapping("/welcome.do")
public String welcome() throws Exception{
//直接填写要跳转的jsp的名称
return "welcome";
}
上面代码的结果就是直接跳转到welcome.jsp页面去了
这其中还有另外一种情况,就是还可以利用model对象:
@RequestMapping("/welcome1.do")
public String welcome1(String name,Model model) throws Exception{
//这种写法spring mvc会自动为传入的参数取名
model.addAttribute(name);
model.addAttribute("username", name);
//直接填写要跳转的jsp的名称
return "welcome";
}
这个代码的意思是:model是携带的数据,将model和页面一起返回给前端。
第三种类型:void
字面理解是什么都不返回,一般用于ajax响应,我觉得这种用法不好,不是我喜欢用的,就不做过多的介绍了。。。
第四种类型:Object
这种类型的意思就是,在controller内有一个对象,将对象转换成json,然后发送给前端,这需要用一个json库来实现json的类型转换
我用的是阿里的fastjson
具体的代码:
@RequestMapping(value = "/handel1.do",produces = "text/html;charset=utf-8")
@ResponseBody
public Object handel1(String username, String age) {
System.out.println(username);
System.out.println(age);
Student student = new Student();
//创建一个对象并赋值
student.setUsername(username);
student.setAge(age);
//利用阿里的库 直接把对象转换成json字符串
String stu = JSON.toJSONString(student);
return stu;
}
上面代码的大致意思就是:接收前端Ajax发送过来的请求,然后将数据保存在Student对象中,将Student对象转换成json字符串返回给前端,因为代码中有一行:@ResponseBody注释,所以他代表只返回一个字符串,不是返回界面。
produces = "text/html;charset=utf-8"这行代码的意思是指定返回类型和编码,防止乱码问题!!!
今天就学到这吧!!!明天接着学。。。