本文采用知识共享 署名-相同方式共享 4.0 国际 许可协议进行许可。
访问 https://creativecommons.org/licenses/by-sa/4.0/ 查看该许可协议。

本文参考官方文档节选翻译, 对开发中对SpringMVC常用类, 做一个简单的整理, 勉强充当一个参考文档
关于更详细的文档请参考: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html

1) 方法参数

本节介绍SpringMVC, Controller中方法的参数用法

类型 desc
可注入类型
WebRequest, NativeWebRequest MVC的请求参数包装, 用于手动获取请求参数
javax.servlet.ServletRequest, javax.servlet.ServletResponse Servlet原生请求响应, 可继承项目的BaseController, 调用getXXX获取
javax.servlet.http.HttpSession Servlet原生Session, 可继承项目的BaseController, 调用getXXX获取
java.util.Map,org.springframework.ui.Model,org.springframework.ui.ModelMap 通常用于节约需要传给模板的Model的构建代码, 如new HashMap()
注解
@PathVariable 获取URI中变量, 项目规范必须写上value对应请求参数名, 如@PathVariable("name")
@MatrixVariable 获取URI中为key-value格式的数据, 参考文档
@RequestParam 获取query或form类型请求参数, 详见@RequestParam
@RequestHeader 获取请求头中的参数, 可不设置value映射Map, 支持将逗号分隔的字符串转换成列表或List
@CookieValue 获取Cookie中的参数
@RequestBody 读取请求体并转换为一个Object, 通常用于转换JSON, 支持的转换类型参考HttpMessageConverter接口的实现
@RequestPart 主要用于文件上传型接口, 用法通常为如下获取文件元数据和文件: @RequestPart("meta-data") MetaData metadata,@RequestPart("file-data") MultipartFile file

@RequestParam

将query(?name=a&age=1)或form(表单提交)类型请求参数绑定到方法参数
简单参数例子

@Controller
@RequestMapping("/pets")
public class EditPetForm {

    @GetMapping
    public String setupForm(
        @RequestParam("petId") int petId // 获取GET请求中的URI中petId参数或, form表单提交中的petId参数
    ) {}
}

文件上传获取MultipartFile例子

@Controller
public class FileUpload {

    @PostMapping("/upload")
    public UploadImageResult upload( 
        @RequestParam("file") MultipartFile multipartFile
        , @RequestParam String fileTag
        , @RequestParam String businessKey
        , @RequestParam(required = false) String metadata
    ) {
        return service.upload(multipartFile, fileTag, businessKey, metadata);
    }
}
  1. 获取query/form参数时, 此注解是可选的, 除非你的param名和请求参数名不对应, 可用注解中的value标注绑定参数
  2. 如将参数类型声明为数组或List,可以为同一参数名称解​​析多个参数值。
  3. 如果将@RequestParam注释声明为Map<String, String>或MultiValueMap<String, String>,而在注释中未指定参数名称, 则会把请求中的所有query/form参数填充进Map中

2) 方法返回值

本节介绍SpringMVC, Controller中方法的返回值类型用法

类型 desc
@ResponseBody 将响应的Object转换为一个消息, 通常用于转换对象为JSON, 支持的转换类型参考HttpMessageConverter接口的实现, 此注解也支持标注类, 但是如需要标注类, 更推荐另一个注解@RestController, @RestController = @Controller + @ResponseBody
String 指定需要渲染的模板/视图名称,通常返回一个Freemarker模板结合Model渲染页面
View 指定需要渲染的视图, 功能如String, 通常用于返回此接口的实现类, 扩展同时使用多个模板引擎
java.util.Map, org.springframework.ui.Model 交给模板引擎的数据, 通常用于一个Method给另一个Method传数据
ModelAndView 指定要渲染的视图和视图需要的数据
void 通常用于手动使用ServletResponse/OutputStream响应数据的情况