修改HttpServletRequest的中的参数值


利用SpringMVC上传文件,方法A

        @RequestMapping(value = "/saveJobInfoFromFile", method = {RequestMethod.POST})
	@ResponseBody
	public ReturnInfo saveJobInfoFromFile(HttpServletRequest request,HttpServletResponse response);
中,我将要循环调用下面的方法B:

	@RequestMapping(value = "/saveJobInfo", method = {RequestMethod.POST})
	@ResponseBody
	public ReturnInfo saveJobInfo(HttpServletRequest request,HttpServletResponse response, String jobJson);


由于方法A中的request需要获取上传的文件,但是这个文件又不能传递给方法B(会有干扰),所以我需要对request的参数进行修改。代码如下:

 // 创建一个通用的多部分解析器
            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(servletContext);
            // 判断 request 是否有文件上传,即多部分请求
            if (multipartResolver.isMultipart(request)) {
                // 转换成多部分request
                MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
                // 取得request中的所有文件名
                Iterator iter = multiRequest.getFileNames();
                while (iter.hasNext()) {
                    // 取得上传文件
                    MultipartFile file = multiRequest.getFile(iter.next());
                    if (file != null) {
                        FileUtils.copyInputStreamToFile(file.getInputStream(),
                        		outFile);
                    }
                }
                for(Entry> temp:multiRequest.getMultiFileMap().entrySet()){
                	for(int i = 0;i

这里有个很奇怪的地方:

MultiValueMap getMultiFileMap();
返回值是MultiValueMap

但是Entry却不行,必须写成Entry>

翻翻了源码,原来Entry用的是Map.Entry,而

public interface MultiValueMap extends Map> 
也告诉了我们他们之间的关系。

最终想了想:这样设计的目的,估计是怕前端出现foo=1,foo=2这样的参数的时候,可以方便的合并吧。


tips:

br = new BufferedReader(new FileReader(outFile)); //code A
br = new BufferedReader(new InputStreamReader(new FileInputStream(outFile),"UTF-8"));//code B

outFile是UTF-8格式,linux下可以正常读取。但是window下读出来是乱码,因为windows默认格式是GBK吧

FileReader是字符流,应该无法设置utf8编码,最后还是改为字节流解决。




你可能感兴趣的:(java)