无法使用文件参数调用REST服务,获取错误预期MultipartHttpServletRequest:是否配置了MultipartResolver?"

时间:2018-02-12 13:06:32

标签: spring rest spring-mvc spring-boot spring-rest

下面是Client Class,该类包含使用File参数调用REST服务的REST客户端:

package com.main;

import java.io.IOException;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
// Service Class with REST Client
public class ServiceCaller {
//main method contains service REST Client
public static void main(String[] args) throws IOException {
 //creating multivaluemap object
  MultiValueMap<String, Object> bodyMap = new LinkedMultiValueMap<>();
  bodyMap.add("file", "F:\\DelhiAirportDemo.txt");
  //creating headers
  HttpHeaders headers = new HttpHeaders();
  headers.setContentType(MediaType.MULTIPART_FORM_DATA);
  //creating entity with bodymap and header
  HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(bodyMap, headers);

  RestTemplate restTemplate = new RestTemplate();

  //below calling service exposed on local host
  ResponseEntity<String> response = restTemplate.exchange("http://localhost:8080/Bandwidth_Evaluation_Server/upload",
          HttpMethod.GET, requestEntity, String.class);
  System.out.println("response status: " + response.getStatusCode());
  System.out.println("response body: " + response.getBody());
  }

}

下面是我的dispatcher-servlet.xml,其中包含multipartResolver配置。

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <mvc:annotation-driven />
    //component scan to scan all the controllers
    <context:component-scan base-package="controller" />
    // view resolver bean is configured
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>
    <!-- Specifying the Resource location to load JS, CSS, Images etc -->
    <mvc:resources mapping="/resources/**" location="/resources/" />

    //configuring content negotiation manager
    <bean id="cnManager"
        class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
        <property name="favorPathExtension" value="true" />
        <property name="ignoreAcceptHeader" value="true" />
        <property name="defaultContentType" value="text/html" />
        <property name="useJaf" value="false" />
        <property name="mediaTypes">
            <map>
                <!-- <entry key="html" value="text/html" /> -->
                <entry key="json" value="application/json" />
            </map>
        </property>
    </bean>
    //configuring multipartResolver bean for multipart file
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="20000000" />
    </bean>
</beans>

以下是我的服务器控制器类:

package controller;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
// spring controller class with a service exposed here
@Controller
public class UploadController {

     // This method will be called from client main method
    @RequestMapping(value = "/upload", method = RequestMethod.GET)
    public String singleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) {
    //checking file is empty or not
        if (file.isEmpty()) {
            redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
            return "redirect:uploadStatus";
        }
        try {
            // Get the file and save it somewhere
            byte[] bytes = file.getBytes();
            Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
            // writing file
            Files.write(path, bytes);
            redirectAttributes.addFlashAttribute("message",
                    "You successfully uploaded '" + file.getOriginalFilename() + "'");

        } catch (IOException e) {
//catching exceptions here
            e.printStackTrace();
        }
        return "redirect:/uploadStatus";
    }
}

以下是客户端的错误

  

线程中的异常&#34; main&#34;   org.springframework.web.client.HttpServerErrorException:500内部   服务器错误

以下是服务器端的错误

  

java.lang.IllegalArgumentException:预期   MultipartHttpServletRequest:是否配置了MultipartResolver?

0 个答案:

没有答案