2013-07-26 10 views
9

Nel mio server MVC di primavera desidero ricevere una richiesta multipart/form contenente sia un file (un'immagine) che alcuni metadati JSON. Posso creare una richiesta multipart ben formata in cui la sezione JSON ha Content-Type=application/json. Il servizio di primavera è nella forma:Aggiungi convertitore di messaggi JSON per multipart/form-data

@RequestMapping(value = MY_URL, method=RequestMethod.POST, headers="Content-Type=multipart/form-data") 
public void myMethod(@RequestParam("image") MultipartFile file, @RequestParam("json") MyClass myClass) { 
... 
} 

Il file è correttamente caricato, ma sto avendo problemi con la parte JSON. Ottengo questo errore:

org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type 'java.lang.String' to required type 'myPackage.MyClass'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [myPackage.MyClass]: no matching editors or conversion strategy found 

Se io non uso richiesta multipart conversione JSON funziona bene con Jackson 2, ma quando si utilizza multipart ottengo l'errore precedente. Penso di dover configurare il convertitore di messaggi multipart per supportare JSON come parte del messaggio, ma non so come. Qui è la mia configurazione:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /> 
<mvc:annotation-driven> 
    <mvc:message-converters> 
     <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> 
    </mvc:message-converters> 
</mvc:annotation-driven> 

Tutto funziona bene se uso String come tipo di myClass invece di MyClass, ma voglio utilizzare il supporto Spring MVC per la conversione dei parametri.

+0

sto anche di fronte problema simile http://stackoverflow.com/questions/18896648/json-post-spring-mvc-curl-400-bad-request ma nessuna soluzione ancora – Pradeep

risposta

1

Non ho idea di come farlo ma so @RequestParam ("json") MyClass myClass u può cambiare in @RequestParam ("json") String myClass e build object class di JSON convertito! Non va bene, ma funziona

7

Se si utilizza l'annotazione @RequestPart anziché @RequestParam, in realtà passerà i parametri attraverso i convertitori di messaggi. Quindi, se si cambia il metodo di controllo per quanto segue, dovrebbe funzionare come lei:

@RequestMapping(value = MY_URL, method=RequestMethod.POST, headers="Content-Type=multipart/form-data") 
public void myMethod(@RequestParam("image") MultipartFile file, @RequestPart("json") MyClass myClass) { 
... 
} 

Si può leggere di più su di esso nella guida di riferimento Primavera: http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/mvc.html#mvc-multipart-forms-non-browsers