springMVC controller中方法的返回值类型
来源:互联网 发布:淘宝标题测试 编辑:程序博客网 时间:2024/05/22 10:55
具体介绍
详细介绍每一个返回类型的各个特点;
ModelAndView
1
@RequestMapping
(method=RequestMethod.GET)
2
public
ModelAndView index(){
3
ModelAndView modelAndView =
new
ModelAndView(
"/user/index"
);
4
modelAndView.addObject(
"xxx"
,
"xxx"
);
5
return
modelAndView;
6
}
使用addObject()设置需要返回的值,addObject()有几个不同参数的方法,可以默认和指定返回对象的名字。
调用addObject()方法将值设置到一个名为ModelMap的类属性,ModelMap是LinkedHashMap的子类,
具体请看类。
1
@RequestMapping
(method=RequestMethod.GET)
2
public
ModelAndView index(){
3
ModelAndView modelAndView =
new
ModelAndView();
4
modelAndView.addObject(
"xxx"
,
"xxx"
);
5
modelAndView.setViewName(
"/user/index"
);
6
return
modelAndView;
7
}
对于ModelAndView类的属性和方法
Model
一个模型对象,主要包含spring封装好的model和modelMap,以及Java.util.Map,当没有视图返回的时候视图名称将由requestToViewNameTranslator决定;Model 是一个接口, 其实现类为ExtendedModelMap,继承了ModelMap类。
ModelMap
待续
Map
1
@RequestMapping
(method=RequestMethod.GET)
2
public
Map<String, String> index(){
3
Map<String, String> map =
new
HashMap<String, String>();
4
map.put(
"1"
,
"1"
);
5
//map.put相当于request.setAttribute方法
6
return
map;
7
}
PS:响应的view应该也是该请求的view。等同于void返回。
- @RequestMapping("/demo2/show")
- publicMap<String, String> getMap() {
- Map<String, String> map = newHashMap<String, String>();
- map.put("key1", "value-1");
- map.put("key2", "value-2");
- returnmap;
- }
在jsp页面中可直通过${key1}获得到值, map.put()相当于request.setAttribute方法。
写例子时发现,key值包括 - . 时会有问题.
View
这个时候如果在渲染页面的过程中模型的话,就会给处理器方法定义一个模型参数,然后在方法体里面往模型中添加值。可以返回pdf excel等,暂时没详细了解。
String
对于String的返回类型,笔者是配合Model来使用的;
1
@RequestMapping
(method = RequestMethod.GET)
2
public
String index(Model model) {
3
String retVal =
"user/index"
;
4
List<User> users = userService.getUsers();
5
model.addAttribute(
"users"
, users);
6
7
return
retVal;
8
}
或者通过配合@ResponseBody来将内容或者对象作为HTTP响应正文返回(适合做即时校验);
1
@RequestMapping
(value =
"/valid"
, method = RequestMethod.GET)
2
public
@ResponseBody
3
String valid(
@RequestParam
(value =
"userId"
, required =
false
) Integer userId,
4
@RequestParam
(value =
"logName"
) String strLogName) {
5
return
String.valueOf(!userService.isLogNameExist(strLogName, userId));
6
7
}
ps:返回字符串表示一个视图名称,这个时候如果需要在渲染视图的过程中需要模型的话,就可以给处理器添加一个模型参数,然后在方法体往模型添加值就可以了,
String 指定返回的视图页面名称,结合设置的返回地址路径加上页面名称后缀即可访问到。
注意:如果方法声明了注解@ResponseBody ,则会直接将返回值输出到页面。
例如:
- @RequestMapping(value = "/something", method = RequestMethod.GET)
- @ResponseBody
- publicString helloWorld() {
- return"Hello World";
- }
上面的结果会将文本"Hello World "直接写到http响应流。
- @RequestMapping("/welcome")
- publicString welcomeHandler() {
- return"center";
- }
1):字符串代表逻辑视图名
真实的访问路径=“前缀”+逻辑视图名+“后缀”
注意:如果返回的String代表逻辑视图名的话,那么Model的返回方式如下:
public String testController(Model model){
model.addAttribute(attrName,attrValue);//相当于ModelAndView的addObject方法
return "逻辑视图名";
}
2):代表redirect重定向
redirect的特点和servlet一样,使用redirect进行重定向那么地址栏中的URL会发生变化,同时不会携带上一次的request
案例:
public String testController(Model model){
return "redirect:path";//path代表重定向的地址
}
3):代表forward转发
通过forward进行转发,地址栏中的URL不会发生改变,同时会将上一次的request携带到写一次请求中去
案例:
public String testController(Model model){
return "forward:path";//path代表转发的地址
}
Void
当返回类型为Void的时候,则响应的视图页面为对应着的访问地址
01
@Controller
02
@RequestMapping
(value=
"/type"
)
03
public
class
TypeController
extends
AbstractBaseController{
04
05
@RequestMapping
(method=RequestMethod.GET)
06
public
void
index(){
07
ModelAndView modelAndView =
new
ModelAndView();
08
modelAndView.addObject(
"xxx"
,
"xxx"
);
09
}
10
}
返回的结果页面还是:/type
PS:这个时候我们一般是将返回结果写在了HttpServletResponse 中了,如果没写的话,spring就会利用RequestToViewNameTranslator 来返回一个对应的视图名称。如果这个时候需要模型的话,处理方法和返回字符串的情况是相同的。
小结:
1.使用 String 作为请求处理方法的返回值类型是比较通用的方法,这样返回的逻辑视图名不会和请求 URL 绑定,具有很大的灵活性,而模型数据又可以通过 ModelMap 控制。
2.使用void,map,Model 时,返回对应的逻辑视图名称真实url为:prefix前缀+视图名称 +suffix后缀组成。
3.使用String,ModelAndView返回视图名称可以不受请求的url绑定,ModelAndView可以设置返回的视图名称。
Model model,HttpServletRequest request, ModelMap map声明变量
request.getSession().setAttribute("test", "haiwei2Session");
request.setAttribute("test", "haiwei1request");
map.addAttribute("test", "haiweiModelMap");
model.addAttribute("test", "haiweiModel");
我通过${test}这个方式取值,优先取Model和ModelMap的,Model和ModelMap是同一个东西,谁最后赋值的就取谁的,然后是request,最后是从session中获取
- springMVC controller中方法的返回值类型
- springmvc-Controller类的方法的不同返回值类型
- springMVC对于controller处理方法返回值的可选类型
- springMVC对于controller处理方法返回值的可选类型
- springMVC对于controller处理方法返回值的可选类型
- springMVC对于controller处理方法返回值的可选类型
- springMVC对于controller处理方法返回值的可选类型
- springMVC对于controller处理方法返回值的可选类型
- springMVC教程(八)controller中方法的返回值类型
- SpringMVC Controller 返回值的可选类型
- SpringMVC Controller 返回值的可选类型
- SpringMVC Controller 返回值的可选类型
- SpringMVC - Controller 返回值的可选类型
- SpringMVC Controller 返回值的可选类型
- SpringMVC Controller 返回值的可选类型
- SpringMVC Controller 返回值的可选类型
- SpringMVC Controller 的返回类型
- SpringMVC中controller中方法返回类型为ResponseEntity<String>乱码的问题
- Java基础练习题 (7)网络编程
- 第三天的感想
- 随手记
- 安卓开发-ListView侧拉菜单,置顶等仿QQ侧拉菜单侧拉点击切换图片,侧拉点击事件带上拉加载更多,下拉刷新
- [链分治 重链剖分 FWT] BZOJ 4911 [Sdoi2017]切树游戏
- springMVC controller中方法的返回值类型
- 精灵进程
- 欧拉角与万向节死锁
- 池内亚也--请不要忘记,这张照片中…
- AYA--已经不说想要回到那天,我要…
- INI解说
- IE8快捷键大全[转]
- Linux下配置dns服务器
- JS返回顶部