在SpringMVC中一般非文件的表单提交,在request时会自动以‘&’符号来拼接参数。但是在multipat表单请求时会将参数分为不同的数据域来传递。multipart请求中会将type为file属性的域文件转行成二进制数据。
对于Multipart请求,springmvc会有一个multipart解析器来处理multipart请求。(控制器有种接受参数的方法,可以使multipart解析器不是配置的)。
SpringMVC提供了两种multipart解析器:
CommonMultipartResolver(servlet3.0版本以前的Servlet容器也可以用),不强制配置临时文件路径,默认的路径是Servlet的临时目录。
StandardServletMultipartResolver(必须是Servlet3.0以后的版本才能使用),必须配置临时文件路径。
这两个都可以设置文件的限制信息,如:文件大小
我们常用的接受文件参数的方式:使用MultipartFile接口类,文件参数会自动注入到MultipartFile中。
第二种:使用@RequstPart直接将二进制文本转换成字节数组。
第三种:使用@RequstPart直接将二进制文本转换成Part对象,很多方法和Multipart对象很相似。这个居然不需要Multipart解析器。
异常处理:
这里可以将异常映射成对应的请求状态(可以很好的伪装一下自己的异常,哈哈哈)。
@ResponseStatus可以处理指定的异常,将异常映射成指定的HTTP请求。
关于Spring中的异常,在控制器@Controller中使用@ExceptionHandler,可以拦截@ExceptionHandler指定的异常,使用@ExceptionHandler注解的方法处理。这里@ExceptionHandler是可以拦截所在控制器范围内的异常。
如果需要将@ExceptionHandler处理扩展到整个应用全局上,可以在@ControllerAdivce注解的类中。@ControllerAdvice,本身包含@Compnet注解,这个叫做控制器通知,作用于整个应用。场景:应用出现某种异常,不需要每个Controller都添加@ExceptionHandler,可以使用@ControllerAdvice+@ExceptionHandler,一劳永逸。