SpringMVC 注解(三) requestHeader,requestPart

@RequestHeader

类似requestbodyrequestparam 不过请求的参数必须是 在header 信息中,否则会报400,错误,因为默认 required属性为true


@RequestPart

支持对multipart/form-data 类型的参数进行参数绑定,支持的参数类型有 :MultipartFile,MulitpartResolver , Part 等参数

对于其他任意的参数类型,类似于 requestBody 对参数的解析

注意:requestParam 类型对于 multipart/form-data  也支持参数解析,区别在于处理字符串时不同

示例:
package com.game.controller;

import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

@Controller
@RequestMapping(value="test",produces="text/html;charset=UTF-8")
public class TestController {
	
	@RequestMapping("one")
	@ResponseBody
	public String test(HttpServletRequest req,HttpServletResponse resp,@RequestPart String tk){
		System.out.println("tk="+tk);
		return "ok";
	}
	
	
	
	//文件上传
	@RequestMapping("uploadFile")
	@ResponseBody
	public void uploadFile(HttpServletRequest req,HttpServletResponse resp,@RequestPart("test") MultipartFile file) throws IllegalStateException, IOException{
		System.out.println("ok");
		System.out.println(file);
		String fileName = file.getOriginalFilename();
		System.out.println("fileName="+fileName);
		String path = req.getSession().getServletContext().getRealPath("upload");  
		System.out.println("path="+path);
		File seFile = new File(path,fileName);
		file.transferTo(seFile);
		return;
	}
	
	
}

注意:

这里必须配置 multipartResolver 解析器,

否则为报500 Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided

一般我们都是在application-mvc.xml 中配置,可是我现在是使用的非xml文件启动的springmvc (参考:https://mp.csdn.net/postedit/80741743),可以在WebConfig 中新增 multipartResolver 的配置,代码如下:

package before.springmvc;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

/**
 * 配置 SpringMVC 视图解析类WebConfig ,需要继承自 WebMvcConfigureAdapter
 * 
 * 类似于application-mvc.xml 文件,此文件的配置大部分都可在此类中配置
 * @author Administrator
 *
 */

@Configuration
@EnableWebMvc //启动 springMVC
@ComponentScan(value = {"com.game.controller"})	//配置组件扫描
public class WebConfig extends WebMvcConfigurerAdapter{
	
	//配置jsp 视图解析器
	@Bean
	public ViewResolver viewResolver(){
		InternalResourceViewResolver resolver = new InternalResourceViewResolver();
		resolver.setPrefix("/view");//设置预加载路径/目录
		resolver.setSuffix(".jsp");  //设置允许后缀 //返回时也自动匹配到该后缀
		resolver.setExposeContextBeansAsAttributes(true);
		return resolver;
	}
	
	//配置静态资源的处理
	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();//对静态资源的请求转发到容器缺省的servlet,而不使用 DispatcherServlet
	}
	
	//配置MultipartResolver 解析器
	@Bean
	public MultipartResolver multipartResolver(){
		CommonsMultipartResolver multipartRe = new CommonsMultipartResolver();
		multipartRe.setMaxUploadSize(1024000000);
		multipartRe.setResolveLazily(true);
		multipartRe.setMaxInMemorySize(4096);
		multipartRe.setDefaultEncoding("UTF-8");//设置默认字符集
		return multipartRe;
		
	}

}

猜你喜欢

转载自blog.csdn.net/kzcming/article/details/80756219
今日推荐