内容参考自博客:

http://blog.csdn.net/u011001084/article/details/52846791

http://blog.csdn.net/xuxiaoyinliu/article/details/50349011

https://www.cnblogs.com/best/p/5669010.html#_lab2_1_0

Controller接收的参数:

  基本数据类型像int,spring是可以直接转换的方法,当参数名与http中请求的参数名称相同时会进行自动映射。

  String也是一样的。

  然后是非String的引用型,像Integer,传个3过来Spring也是会转换的。

  当参数为实体类的时候,像

   @RequestMapping("xxx")public String sent(Book s)     (Book有String bookName float price 两个属性)

  这种情况服务器会将Book类实例化(所以如果没有@RequestParam(required=false)实体引用类参数在服务器端得到的结果不可能为null),在该类中找到其set方法所对应的所有属性,如果地址中有对应的属性就会对其赋值,反之采用默认值,这时参数相当于

  @RequestMapping("xxx")public String sent(String bookName, Float price)

  甚至可以是复杂数据类型,就是指一个自定义的类里面还有其他的对象类型。具体的自己尝试。

  还可以是List,但不能直接在action中指定List<T>类型,要定义一个类把list集合包装在其中。看个例子:

  

package com.zhangguo.springmvc03.entities;

import java.util.List;

//产品集合
public class ProductList {
private List<Product> items; public List<Product> getItems() {
return items;
} public void setItems(List<Product> items) {
this.items = items;
}
}

  action的代码:

  // 集合类型
@RequestMapping("/action03")
public String action03(Model model, ProductList products) {
model.addAttribute("message", products.getItems().get(0) + "<br/>" + products.getItems().get(1));
return "foo/index";
}

  还有Map也是类似的道理

  

  再讲讲这个@RequestParam注解,简单的参数可以用自动映射,复杂的可以考虑用这个注解来解决问题 ,像我们刚才的List是不能直接完成自动绑定的,但通过这个注解就可以了   @RequestParam有四个参数:

  1、String name

  2、String value

  3、boolean required

  4、String defaultValue

  其中name和value都是一样的,就是url里面请求参数为什么名字才传进来,相当于以前的getParameter(name);然后这个required就是是否需要;sefaultValue是如果客户没有请求这个数据,那么它的默认值为多少。

  看个list绑定的例子:

  

// List集合与数组类型
@RequestMapping("/action05")
public String action05(Model model, @RequestParam("u") List<String> users) {
model.addAttribute("message", users.get(0) + "," + users.get(1));
return "foo/index";
}

  表单也同样可行:

  

<form action="bar/action11" method="post">
<p>
<label>爱好:</label>
<input type="checkbox" value="15" name="id" />阅读
<input type="checkbox" value="20" name="id" />上网
<input type="checkbox" value="73" name="id" />电游
</p>
<button>提交</button>
</form>

  action代码:

 // List与数组绑定基本数据类型
@RequestMapping("/action11")
public String action11(Model model, @RequestParam("id") List<Integer> ids) {
model.addAttribute("message", Arrays.deepToString(ids.toArray()));
return "bar/index";
}

  

  其他的继续在参考博客看吧。。

Controller的返回值:

  ModelView,可以包括数据模型和视图路径。

  view,这个时候如果在渲染页面的过程中模型的话,就会给处理器方法定义一个模型参数,然后在方法体里面往模型中添加值。可以返回pdf excel等,暂时没详细了解。

  Map

@RequestMapping(method=RequestMethod.GET)

   public Map<String, String> index(){

        Map<String, String> map = new HashMap<String, String>();

        map.put("1", "1");

        //map.put相当于request.setAttribute方法

        return map;

   }

   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值包括 - . 时会有问题.

  String,默认如果action(Controller)返回String,此时的String为视图名称,会去视图解析器设定的目录下查找。                                                                                                                                             String还可以表示redirect重定向:

  public String testController(Model model){

    return "redirect:path";//path代表重定向的地址

  }

  如果你想直接写内容到网页中,那么就要用@ResponseBody,这时就会将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流。些时的String不再是路径而是内容,示例脚本如下:

   

  

@RequestMapping("/action32")
@ResponseBody
public String action32()
{
return "not <b>path</b>,but <b>content</b>";
}

  

  void,void在普通方法中是没有返回值的意思,但作为请求处理方法并非这样,存在如下两种情况:

    当方法没有返回值时,方法中并未指定视图的名称,则默认视图的名称为方法名,如下代码所示:

 @RequestMapping("/action33")
public void action33()
{
}

    直接会去访问的路径是:url=/WEB-INF/views/bar/action33.jsp,bar是当前控制器映射的路径,action33是方法名,上面的代码等同于:

@RequestMapping("/action33")
public String action33()
{
return "bar/action33"; //bar是控制器的路径
}

    当方法的返回值为void,但输出流中存在输出内容的时候,不会去查找视图,而是将输入流中的内容直接响应到客户端,响应的内容类型是纯文本,如下代码所示:

 @RequestMapping("/action34")
public void action34(HttpServletResponse response) throws IOException
{
response.getWriter().write("<h2>void method</h2>");
}

    

   

   返回对象实例,当返回值为自定义类型时Spring会把方法认为是视图名称,与返回值为void的类似办法处理URL,但页面中获得数据比较麻烦,示例代码如下:

 @RequestMapping("/action39")
public Product action39()
{
return new Product(1,"iPhone",1980.5);
}

  跟void一样的解决方式,说明以方法名为视图路径名称

  如果在action上添加@ResponseBody注解则返回的是Product本身,而非视图,Spring会选择一个合适的方式解析对象,默认是json。示例代码如下:

@RequestMapping("/action39")
@ResponseBody
public Product action39()
{
return new Product(1,"iPhone",1980.5);
}

   

 附: 

  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的返回值与接收的参数的更多相关文章

  1. SpringMVC中Controller的返回值类型

    Controller方法的返回值可以有以下几种: 1.返回ModelAndView 返回ModelAndView时最常见的一种返回结果.需要在方法结束的时候定义一个ModelAndView对象,并对M ...

  2. SpringMVC中 controller方法返回值

    1)ModelAndView @RequestMapping(value="/itemEdit") public ModelAndView itemEdit(){ //创建模型视图 ...

  3. SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器

    一.参数的传递 1.简单的参数传递 /* @RequestParam用法:入参名字与方法名参数名不一致时使用{ * value:传入的参数名,required:是否必填,defaultValue:默认 ...

  4. SpringMVC的@RequestMapping和Controller方法返回值

    本节内容: @RequestMapping Controller方法返回值 一.@RequestMapping 通过@RequestMapping注解可以定义不同的处理器映射规则. 1. URL路径映 ...

  5. JAVA 框架 springmvc controller的返回值

    一.返回值:ModleView对象. 使用modelAndView.setViewName设置返回的页面.使用modelAndView.addObject设置返回的数据. @RequestMappin ...

  6. SSM框架之SpringMVC(4)返回值类型及响应数据类型

    SpringMVC(4)返回值类型及响应数据类型 1. 返回值分类 1.1. 返回字符串 Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址. @RequestM ...

  7. Web API-如何将Controller的返回值转换成HTTP response消息

    https://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization https://co ...

  8. python -- 初始函数 函数的定义,函数的返回值以及函数的参数

    1.什么是函数,函数的定义及语法 2.函数的返回值 3.函数的参数 一.函数的定义及语法 函数的定义:定义了一个动作或者功能,是对功能的封装 语法: def 函数名( 形参列表 ):          ...

  9. SpringMVC学习笔记三:Controller的返回值

    springMVC的返回值有ModelAndView,String,void,Object类型 项目目录树: 该项目是在前面项目的基础上修改的,这里的pom.xml文件需要加入使用到的包,应为@Res ...

随机推荐

  1. bash shell最基本的语法

    1 shell语句的基本构成 shell每个基本的构成元素之间都相隔一个空格. 比如[ -e file ],[.-e.file.]这四个基本元素之间都相隔了一个空格. 同样的道理[ ! -e file ...

  2. LCS的几种求法

    \(LCS:\) 对于两个长度均为 \(N\) 的数列 \(A\) 和 \(B\) ,存在一个数列 \(C\) 使得 \(C\) 既是 \(A\) 的子序列有事 \(B\) 的子序列,现在需要求这个数 ...

  3. springboot 项目 docker化部署

    最近公司项目需要docker化,项目所使用的框架是springboot,linux环境.第一次接触docker化方面的技术.做的时候,所接触的新知识比较多,留下此文,以便以后用到的时候快速入手. 修改 ...

  4. POJ3621 Sightseeing Cows 最优比率环 二分法

    题目链接:http://poj.org/problem?id=3621 Sightseeing Cows Time Limit: 1000MS   Memory Limit: 65536K Total ...

  5. Swift(一)简单值

    Swift的源文件扩展名是.swift 按照国际惯例,学习一门新语言写的第一个程序都是在屏幕上输出一句 “Hello, world!” .在Swift里,一行代码就搞定了: 如果你以前写过C或者Obj ...

  6. 一步一步学Silverlight 2系列(16):数据与通信之JSON

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  7. python搭建httpserver

    因为手机要下载电脑上的文件,使用手机助手什么的经常出没反应,于是网上查了下,直接使用python搭建简单的HTTP服务器,之后在其运行目录下扔文件就行了.浏览器访问时可以直接显示相关的文件列表.参考了 ...

  8. Python之路,Day13 - 堡垒机

    项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒 ...

  9. 文本质量巧设置,一招让Visio 2007字体从模糊到清晰

    微软的Visio是一款很好用的画图工具,不过,它有一个地方不太好,就是中文字体比较模糊. 如下图: 矩形框内是宋体,9pt,字体很不清晰.无奈我就只好用雅黑字体,略微好一些. 今天发现一个设置,只有修 ...

  10. HashSet重复元素判断

    HashSet不能添加重复的元素,当调用add(Object)方法时候,首先会调用Object的hashCode方法判hashCode是否已经存在,如不存在则直接插入元素:如果已存在则调用Object ...