it-swarm.com.de

SPRING REST: Die Anforderung wurde abgelehnt, da keine mehrteilige Grenze gefunden wurde

Ich habe einen POC für die mehrteilige Dateiuploads für den Frühling 3 Rest erstellt. Es funktioniert gut. Wenn ich jedoch versucht habe, mich mit meiner Anwendung zu integrieren, habe ich Probleme. 

Es löst folgende Ausnahme aus:

org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request;
nested exception is org.Apache.commons.fileupload.FileUploadException:
the request was rejected because no multipart boundary was found**"

Bitte lassen Sie mich wissen, wenn ich mich in irgendeinem Code falsch verhalte.

Bohnen:

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
 <property name="order" value="1" />
 <property name="mediaTypes">
 <map>
   <entry key="json" value="application/json" />
   <entry key="xml" value="application/xml" />
   <entry key="file" value="multipart/mixed" />
 </map>
</property>
</bean>
<!-- multipart resolver -->
 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <!-- one of the properties available; the maximum file size in bytes -->
  <property name="maxUploadSize" value="50000000" />
 </bean>

Regler:

@Controller
public class MultipleFilesRecieve {
    @RequestMapping ( value = "/saveMultiple", method = RequestMethod.POST )
        public String save( FileUploadForm uploadForm ) {
        List<MultipartFile> files = uploadForm.getFiles( );
        List<String> fileNames = new ArrayList<String>( );
        if ( null != files && files.size( ) > 0 ) {
            for ( MultipartFile multipartFile : files ) {
                String fileName = multipartFile.getOriginalFilename( );
                fileNames.add( fileName );
            }
        }
        return "multifileSuccess";
    }
}
25
Cherry

Das Problem liegt nicht in Ihrem Code, sondern in Ihrer Anfrage. Ihnen fehlt die Grenze in Ihrer mehrteiligen Anfrage. Wie gesagt in Spezifikation :

Das Feld "Inhaltstyp" für mehrteilige Entitäten erfordert einen Parameter "border", um die Einkapselungsgrenze festzulegen. Das Einkapselungsgrenze ist definiert als eine Linie, die vollständig aus zwei .__ besteht. Bindestrichzeichen ("-", Dezimalcode 45) gefolgt von der Begrenzung Parameterwert aus dem Header-Feld Content-Type.

Diese und diese Beiträge sollten auch hilfreich sein.

30
sermolaev

@sermolaev hat Recht in seiner Antwort.

Ich möchte meine Erfahrungen mit diesem Problem teilen. Dieses Problem ist bei Postman aufgetreten, aber ich konnte die eigentliche Ursache dafür lange Zeit nicht verstehen. Meine Anforderungsvorlage schien richtig zu sein, da Postman boundary darin enthielt ...

Irgendwann habe ich entdeckt, dass, wenn Sie Content-Type=multipart/form-Header selbst angeben, dieser den von Postman automatisch hinzugefügten überschreibt. Und das führt zu dem gleichen Fehler wie bei Ihnen. Meine Lösung war so einfach wie Content-Type-Header zu entfernen.

2
naXa

Geben Sie in der Anforderung keinen Content-Type-Header an. Es wird klappen.

0
Ankit Rai

Verwenden Sie Sicherheitsfilter? Mein Problem wurde durch Entfernen der Sicherheitsfilterkette gelöst. Davon: 

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).addFilters(this.springSecurityFilterChain).build();

zu diesem:

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();

Ich habe eine Ausgabe geöffnet, in der ich die Details erkläre: https://jira.spring.io/browse/SPR-12114

0
unify