Spring 框架控制器类方法可用的参数与返回类型
参数类型
Spring 有内建的 HTTP 消息转换器用于部分简单类型之间的转换
标准 Servlet 类型:
HttpServletRequest,HttpServletResponse,HttpSession,InputStream,Reader,OutputStream,Writer,java.util.Local(客户端识别出的区域),org.springframework.web.context.request.WebRequest
用于操作原始 Servlet,这些类型的参数由 Spring 提供并保证永不为 null@RequestParam(String)基本类型(与其封装类型或String)
获取指定的 GET 请求参数,POST 表单参数,multipart/form-data 中的参数部分@RequestParam Map<String, String>
获取所有 GET 请求参数,POST 表单参数,multipart/form-data 中的参数部分@RequestHeader(String)基本类型(或String)
获取指定的请求头,如果存在多个请求头值,参数可使用数组或集合形式@RequestHeader Map<String, String>
获取所有请求头HttpHeaders
获取所有请求头@PathVariable(String)基本类型(或String)
用于获取路径映射中的指定参数(类似于获取使用了@RequestMapping(value = "/{userId:\\d+}/{name}")中的userId)@PathVariable Map<String, String>
用于获取路径映射中的所有参数一般的 POJO
Spring 将自动把表单转换为该 POJO。如果是 multipart/form-data 表单用于文件上传,该 POJO 中则可以含有一个Part类型的属性用于获取上传的文件。可以使用@Valid注解进行自动验证,并将第二个参数设置为BindingResult或Errors用于获取验证结果。该过程实际工作的是内置转换器FormHttpMessageConverter@RequestBody 其他类型
将请求实体转换为参数类型对象,需要指定特殊的消息转换器(同时理解源格式与目标格式)。可以使用@Valid注解进行自动验证,并将第二个参数设置为BindingResult或Errors用于获取验证结果。该类型通常用于自定义格式的请求实体的请求,如 XML/JSON 作为源格式的请求HttpEntity<?>
将请求实体转换为参数类型的类型参数对象,同时提供请求头的访问,需要指定特殊的消息转换器(同时理解源格式与目标格式)。不可以使用@Valid注解进行自动验证。该类型通常用于自定义格式的请求实体的请求,如 XML/JSON 作为源格式的请求@RequestPart(String) Part
获取 multipart/form-data 上传文件中的文件部分,多文件上传需要使用参数的数组或集合形式。(不需要特殊的消息转换器,内建的 HTTP 消息转换器会自动处理)Map<String, Object>或ModelMap或Model的非标注类型
Spring 传入到视图中用于渲染的模型,可以在方法执行中添加特性。
返回值类型
void
通知 Spring 响应将手动处理。Spring 在方法返回后不会进行进一步处理Map<String, Object>或ModelMap或Model
即返回模型,将这些类型指定为方法参数的备用方式。Sping 隐式的使用已配置的RequestToViewNameTranslator确定视图名称,再使用已配置的ViewResolver解析成一个真正的视图View
返回一个显式的视图对象,方法返回后请求将转发至该视图。Spring 直接使用该View,无需额外逻辑判断如何像客户端展示模型String(未使用 @ResponseBody 标注方法)
表示用于解析的视图的名称。Spring 使用已配置的ViewResolver将视图名称解析成一个真正的视图ModelAndView
提供了同时返回 (View 与 Model) 或(字符串视图名称与 Model) 的能力。如果是由字符串构造,Spring 使用已配置的ViewResolver将视图名称解析成一个真正的视图HttpEntity<?>
Spring 将把返回类型的类型参数对象转换为响应内容。ResponseEntity继承自HttpEntity并提供了设置响应码的能力。HttpEntity<?>响应码需要使用@ResponseStatus(int)设置(未设置时默认为HttpStatus.OK)。Spring 基于协商的内容类型使用合适的 HTTP 消息转换器进行转换并决定展示到哪个视图Callable<?>或DeferredResult<?>
返回的这些异步类型将使 Spring 释放请求线程并在一个单独的线程中执行返回值其他类型(方法上使用了
@ResponseBody注解)
Spring 将把返回类型的类型参数对象转换为响应内容。有@ResponseBody修饰时,返回类型的其他处理器将被忽略,且该注解比其他返回值处理器优先级都高。响应码需要使用@ResponseStatus(int)设置(未设置时默认为HttpStatus.OK)。Spring 基于协商的内容类型使用合适的 HTTP 消息转换器进行转换并决定展示到哪个视图其他类型(方法上未使用
@ResponseBody注解)
即返回模型特性,将该对象用作 Model 中的一个特性,并将返回类型的驼峰式命名作为 Model 中的特性名(可以使用@ModelAttribute(String)显式指定)。Sping 隐式的使用已配置的RequestToViewNameTranslator确定视图名称,再使用已配置的ViewResolver解析成一个真正的视图
Spring 框架控制器类方法可用的参数与返回类型的更多相关文章
- Java_无参数无返回类型方法及练习
无参数无返回类型方法语法格式: public static void 方法名称(){ 方法体; } class Method03{ /*练习3:输出1-100中的每个数,要求使用无参无返回类型的方法完 ...
- 【实验二】Spring框架笔记——NamedParameterJdbcTemplate与具名参数
在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定. 在 Spring JDBC 框架中, 绑定 ...
- spring mvc +@Valid +@RequestBody 来做参数校验返回400,并且不显示具体message 如何解决
参考文档: https://www.oschina.net/question/115867_2282711 谢谢原作者
- ASP.NET Web API 通过参数控制返回类型(JSON|XML)
一个很实用的技巧,可以在访问web api服务的时候指定返回数据的格式类型,比如 json 或者 xml. 因为 web api 默认返回的是XML格式,但是现在json 比较流行,同时网上也有其他的 ...
- Spring框架Controller层(表现层)针对方法参数是Bean时HttpServletRequest绑定参数值问题解释
在做项目的时候,有一个需求是将数据库中的信息封装到实体类返回到jsp界面 传过来的参数只是实体类的id属性,然后根据id属性去查数据库,事情就是这样,然后 结果遇到很奇怪的事情,在jsp页面中使用EL ...
- Spring MVC(三)--控制器接受普通请求参数
Spring MVC中控制器接受参数的类方式有以下几种: 普通参数:只要保证前端参数名称和传入控制器的参数名称一致即可,适合参数较少的情况: pojo类型:如果前端传的是一个pojo对象,只要保证参数 ...
- Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出
主要拦截前端或后天的请求,打印请求方法参数.返回值.耗时.异常的日志.方便开发调试,能很快定位到问题出现在哪个方法中. 前端请求拦截,mvc的拦截器 import java.util.Date; im ...
- Spring MVC(三)控制器获取页面请求参数以及将控制器数据传递给页面和实现重定向的方式
首先做好环境配置 在mvc.xml里进行配置 1.开启组件扫描 2.开启基于mvc的标注 3.配置试图处理器 <?xml version="1.0" encoding=&qu ...
- Java面试题大全(javaSe,HTML,CSS,js,Spring框架等)
目录 1. Java基础部分 7 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2.Java有没有goto? 7 3.说说&和& ...
随机推荐
- 【java开发系列】—— java输入输出流
前言 任何语言输入输出流都是很重要的部分,比如从一个文件读入内容,进行分析,或者输出到另一个文件等等,都需要文件流的操作.这里简单介绍下reader,wirter,inputstream,output ...
- Markdown 学习
一级标题 一级标题 === 或 # 一级标题 二级标题 二级标题 --- 或 ## 二级标题 三级标题 ### 三级标题 链接Gayhub [Gayhub](https://www.github.co ...
- 百度地图JavaScript开发入门先知
最近项目紧急开发了一些百度地图的功能,觉得百度地图实数强大!于是今天不忙总结一下,看到不错的文章先转载. 文章出处:https://www.opengps.cn/Blog/View.aspx?id=1 ...
- Windows安装时的几个命令(摘录)
Windows无法安装到这个磁盘.选中的磁盘采用GPT分区形式. 1.在系统提示无法安装的那一步,按住“shift+f10”,呼出“cmd”命令符. 2.输入:diskpart,回车.进入diskpa ...
- [USACO17FEB]Why Did the Cow Cross the Road III G
嘟嘟嘟 首先看到这种序列的问题,我就想到了逆序对,然后就想如何把这道题转化. 首先要满足这个条件:ai <bi.那么我们把所有数按第一次出现的顺序重新赋值,那么对于新的数列,一定满足了ai &l ...
- 【翻译】苹果官网的命名规范之 Naming Properties and Data Types
苹果官方原文:Naming Properties and Data Types 前言:纯属练习英语和学习.翻译错误和不通顺的地方敬请谅解和指正.O(∩_∩)O 属性和数据类型的命名 本节讲述了属性定义 ...
- 【洛谷P3811】[模板]乘法逆元
乘法逆元 题目链接 求逆元的三种方式: 1.扩欧 i*x≡1 (mod p) 可以化为:x*i+y*p=1 exgcd求x即可 inline void exgcd(int a,int b,int &a ...
- Python—面向对象06 内置方法
一 .isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object ...
- java中String、包装类、枚举类的引用传递
一般情况下,我们认为Java中了除了八种基本数据类型,其他都是对象,进行引用传递: 但是:String.包装类.枚举类作为参数传递后发现,没有达到引用传递的效果,很多人认为它是值传递! 首先,对象肯定 ...
- Unity3d Gis 坐标转换
最近在做unity3d与Gis结合的项目,最基本的就是坐标的转换问题,比如把经纬度为(166.23.9.27 , 39.55.15.74) 转换到unity里面成相应的位置点,废话不多说 上代码: u ...