参数类型

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 注解进行自动验证,并将第二个参数设置为 BindingResultErrors 用于获取验证结果。该过程实际工作的是内置转换器 FormHttpMessageConverter

  • @RequestBody 其他类型
    将请求实体转换为参数类型对象,需要指定特殊的消息转换器(同时理解源格式与目标格式)。可以使用 @Valid 注解进行自动验证,并将第二个参数设置为 BindingResultErrors 用于获取验证结果。该类型通常用于自定义格式的请求实体的请求,如 XML/JSON 作为源格式的请求

  • HttpEntity<?>
    将请求实体转换为参数类型的类型参数对象,同时提供请求头的访问,需要指定特殊的消息转换器(同时理解源格式与目标格式)。不可以使用 @Valid 注解进行自动验证。该类型通常用于自定义格式的请求实体的请求,如 XML/JSON 作为源格式的请求

  • @RequestPart(String) Part
    获取 multipart/form-data 上传文件中的文件部分,多文件上传需要使用参数的数组或集合形式。(不需要特殊的消息转换器,内建的 HTTP 消息转换器会自动处理)

  • Map<String, Object>ModelMapModel 的非标注类型
    Spring 传入到视图中用于渲染的模型,可以在方法执行中添加特性。

返回值类型

  • void
    通知 Spring 响应将手动处理。Spring 在方法返回后不会进行进一步处理

  • Map<String, Object>ModelMapModel
    即返回模型,将这些类型指定为方法参数的备用方式。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 框架控制器类方法可用的参数与返回类型的更多相关文章

  1. Java_无参数无返回类型方法及练习

    无参数无返回类型方法语法格式: public static void 方法名称(){ 方法体; } class Method03{ /*练习3:输出1-100中的每个数,要求使用无参无返回类型的方法完 ...

  2. 【实验二】Spring框架笔记——NamedParameterJdbcTemplate与具名参数

    在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定. 在 Spring JDBC 框架中, 绑定 ...

  3. spring mvc +@Valid +@RequestBody 来做参数校验返回400,并且不显示具体message 如何解决

    参考文档: https://www.oschina.net/question/115867_2282711   谢谢原作者

  4. ASP.NET Web API 通过参数控制返回类型(JSON|XML)

    一个很实用的技巧,可以在访问web api服务的时候指定返回数据的格式类型,比如 json 或者 xml. 因为 web api 默认返回的是XML格式,但是现在json 比较流行,同时网上也有其他的 ...

  5. Spring框架Controller层(表现层)针对方法参数是Bean时HttpServletRequest绑定参数值问题解释

    在做项目的时候,有一个需求是将数据库中的信息封装到实体类返回到jsp界面 传过来的参数只是实体类的id属性,然后根据id属性去查数据库,事情就是这样,然后 结果遇到很奇怪的事情,在jsp页面中使用EL ...

  6. Spring MVC(三)--控制器接受普通请求参数

    Spring MVC中控制器接受参数的类方式有以下几种: 普通参数:只要保证前端参数名称和传入控制器的参数名称一致即可,适合参数较少的情况: pojo类型:如果前端传的是一个pojo对象,只要保证参数 ...

  7. Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出

    主要拦截前端或后天的请求,打印请求方法参数.返回值.耗时.异常的日志.方便开发调试,能很快定位到问题出现在哪个方法中. 前端请求拦截,mvc的拦截器 import java.util.Date; im ...

  8. Spring MVC(三)控制器获取页面请求参数以及将控制器数据传递给页面和实现重定向的方式

    首先做好环境配置 在mvc.xml里进行配置 1.开启组件扫描 2.开启基于mvc的标注 3.配置试图处理器 <?xml version="1.0" encoding=&qu ...

  9. Java面试题大全(javaSe,HTML,CSS,js,Spring框架等)

    目录 1. Java基础部分 7 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2.Java有没有goto? 7 3.说说&和& ...

随机推荐

  1. Oracle 查看session级别信息

    1. 查看活动会话信息[sql] view plain copySELECT *    FROM V$SESSION   WHERE USERNAME IS NOT NULL     AND STAT ...

  2. TP5.0:访问不同模块方法,跳转视图页面

    我们在开发项目时,都会给每个项目加上基本的后台管理页面,并命名为admin 那么,我们在添加admin后台模块后,怎么通过url访问admin后台模块文件代码呢? 1.访问admin模块默认文件的UR ...

  3. C++中临时对象的产生与优化

    看到了几篇讲的不错的博客,这里收集起来 不明白的地方互相参考 https://blog.csdn.net/fangqingan_java/article/details/9320769 https:/ ...

  4. [19/03/17-星期日] 常用类_Calendar日历类&GregorianCalendar公历日历类

    一.概念 Calendar 类是一个抽象类,为我们提供了关于日期计算的相关功能,比如:年.月.日.时.分.秒的展示和计算. GregorianCalendar 是 Calendar 的一个具体子类,提 ...

  5. print (re.findall("(?:abc)+","abcabcabc"))

    _*_ coding:utf-8 _*_ import re findall 有括号优先级,所以我们这里一直出现的都是 abc print (re.findall("(abc)+" ...

  6. Java中Synchronized的用法(简单介绍)

    简单介绍 synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调 ...

  7. Android学习笔记_71_Android 多个项目之间如何引用 项目怎样打jar包

    一.将整个项目作为资源文件 1.需要将被应用的项目设置为库项目. 2.将该项目的配置文件中的四大组件清空,例如下面代码: <?xml version="1.0" encodi ...

  8. 【题解】P1516 青蛙的约会(Exgcd)

    洛谷P1516:https://www.luogu.org/problemnew/show/P1516 思路: 设两只青蛙跳了T步 则A的坐标为X+mT   B的坐标为Y+nT 要使他们相遇 则满足: ...

  9. 百度webAPI配合微信JSDK获取用户当前位子

    逻辑: ①通过微信JS-SDK 获取地理位置接口 获取经纬度 ②调用百度地图转换经纬度的API,得到百度地图的经纬度 ③调用百度地图 正/逆地址编码服务-->国际化逆地理编码 得到JSON数据, ...

  10. 面试遇到的select into 但是在PL/SQL developer ORA-00905:缺失关键字"错误。

    select into 是什么意思. 1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,...) select value1, ...