Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC-在多部分HTTP Post中获取非多部分表单/数据_Java_Spring_Spring Mvc_Multipart - Fatal编程技术网

Java Spring MVC-在多部分HTTP Post中获取非多部分表单/数据

Java Spring MVC-在多部分HTTP Post中获取非多部分表单/数据,java,spring,spring-mvc,multipart,Java,Spring,Spring Mvc,Multipart,从我的客户端应用程序(AngularJS)中,我上传了一个文件和一些其他数据作为FormData var formData=new FormData(); formData.append("file",file.files[0]); //files formData.append("docData", angular.toJson($scope.docdata)); //invoice angular.toJson($scope.docda

从我的客户端应用程序(AngularJS)中,我上传了一个文件和一些其他数据作为FormData

var formData=new FormData();
             formData.append("file",file.files[0]); //files
             formData.append("docData", angular.toJson($scope.docdata));  //invoice
angular.toJson($scope.docdata)
的值类似于
{“配置”:20,“标题”:“invoicedata”}

这是我的HTTP帖子

$http({
                    method: 'POST',
                    url: uploadurl,
                    headers: {'Content-Type': false},
                    data: formData,
                    transformRequest: function(data, headersGetterFunction) {
                        return data;
                    }
                })
                .success(function(data, status) {   
                    alert("Error");

                })
                .error(function(data, status) {
                    alert("Error");

                });
请求正在我的SpringMVC控制器中,我能够处理该文件。但是其他数据(
docData
)我无法获取

这是我的UploadController.java

@Controller
public class UploadController {

    @RequestMapping(value="/newDocument", method = RequestMethod.POST)
    public void UploadFile(HttpServletRequest request, HttpServletResponse response) {

        MultipartHttpServletRequest mRequest=(MultipartHttpServletRequest)request;

        Iterator<String> itr=mRequest.getFileNames();
        while(itr.hasNext()){
            MultipartFile file=mRequest.getFile(itr.next());
            String fileName=file.getOriginalFilename();

            try {

            File newFile = new File("/home/myHome/file-uploaded/"+fileName);

              // if the directory does not exist, create it
              if (!newFile.getParentFile().exists()) {
                newFile.getParentFile().mkdirs();  
              }
                FileCopyUtils.copy(file.getBytes(), newFile);
            }
            catch(FileNotFoundException e) {
                e.printStackTrace();
            }
            catch(IOException e) {
                e.printStackTrace();
            }

        }

        Enumeration<String>  parametrs = request.getParameterNames();

        while(parametrs.hasMoreElements()) {
            String param=parametrs.nextElement();
            System.out.println("Param : " + param);
            Object object=request.getAttribute(param);
            System.out.println("Param Instance" + object.getClass().getName());
        }
    }
}
第63行引用了
System.out.println(“参数实例”+object.getClass().getName())
这意味着对象为空


如何获取值?

当您使用
多部分
时,表单字段将包含在
请求流中。因此,您必须检查它们是否是表单字段

这就是我在servlet中使用的内容,您可以对其进行适当的更改以在
springmvc
中工作

boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if (isMultipart)
        {
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            try 
            {
                List items = upload.parseRequest(request);
                Iterator iterator = items.iterator();
                while (iterator.hasNext()) 
                {
                    FileItem item = (FileItem) iterator.next();

                    if (item.isFormField()) //your code for getting form fields
                    {
                        String name = item.getFieldName();
                        String value = item.getString();
                        System.out.println(name+value);
                    }

                    if (!item.isFormField()) 
                    {
                       //your code for getting multipart 
                    }
                }
            }

@ShijuKBabu我已经更新了我在servlet中使用的代码
if(item.isFormField())
条件包含获取非多部分数据的代码。此处的
上载是什么?
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if (isMultipart)
        {
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            try 
            {
                List items = upload.parseRequest(request);
                Iterator iterator = items.iterator();
                while (iterator.hasNext()) 
                {
                    FileItem item = (FileItem) iterator.next();

                    if (item.isFormField()) //your code for getting form fields
                    {
                        String name = item.getFieldName();
                        String value = item.getString();
                        System.out.println(name+value);
                    }

                    if (!item.isFormField()) 
                    {
                       //your code for getting multipart 
                    }
                }
            }