2015-12-09 10 views
5

Come ho stabilito il limite massimo di upload di file, sto ottenendoMultipart Carica file Dimensione superi eccezione in cambio di boot messaggio di errore JSON primavera

org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 2097152 bytes 

errore durante il caricamento file.It sta dando errore 500 al mio api, io dovrei gestire questo errore e la risposta in formato JSON non un ErrorPage ritorno, se fornito in ErrorController

voglio prendere tale eccezione e dare risposta JSON non ErrorPage.

@RequestMapping(value="/save",method=RequestMethod.POST) 
    public ResponseDTO<String> save(@ModelAttribute @Valid FileUploadSingleDTO fileUploadSingleDTO,BindingResult bindingResult)throws MaxUploadSizeExceededException 
    { 
     ResponseDTO<String> result=documentDetailsService.saveDocumentSyn(fileUploadSingleDTO, bindingResult); 

     return result; 

    } 

DTO che accetta documento come segue

public class FileUploadSingleDTO { 
@NotNull 
    private Integer documentName; 

    private Integer documentVersion; 

    @NotNull 
    private MultipartFile file; 
} 
+0

voglio prendere che le dimensioni del file superano exception..after file di grandi dimensioni è il codice uploaded.My funziona bene quando ho Carica file di dimensioni inferiori MaxUploadSize – MasterCode

+0

Qual è il tuo codice per gestire i file caricati? –

+0

È anche possibile utilizzare 'MultipartHttpServletRequest' invece di' HttpServletRequest'. Quindi per accedere ai file caricati, devi solo usare 'MultipartFile file = request.getFile (request.getFileNames(). Next());', che dovrai completare con una 'IOException'. Ciò mantiene il tuo DTO magro. –

risposta

12

Per par come ti conosco può gestire l'eccezione di file multipart usando questo.

@ControllerAdvice 
public class MyErrorController extends ResponseEntityExceptionHandler { 

Logger logger = org.slf4j.LoggerFactory.getLogger(getClass()); 

@ExceptionHandler(MultipartException.class) 
@ResponseBody 
String handleFileException(HttpServletRequest request, Throwable ex) { 
    //return your json insted this string. 
    return "File upload error"; 
    } 
} 
+0

Dopo aver scavato nel codice sorgente, ho trovato che CommonsMultipartResolver sta gestendo l'eccezione FileSizeLimitExceededException e il lancio di nuove MultipartException ("Impossibile analizzare la richiesta di servlet multipart", ex); ecco ex FileSizeLimitExceededException, che è in realtà lanciato dalla classe commons.fileupload.FileuploadBase. Quindi non puoi gestire FileSizeLimitExceededException. Utilizza gli errori di caricamento dei file di implementazione generici utilizzando MultipartException. –

+0

fammi testare se funziona – MasterCode

+0

@RampelliSrinivas sarà molto completo se puoi spiegare il commento che hai scritto sopra un po '. – quintin

2

aggiungere un gestore speciale un'eccezione nel controller:

@ExceptionHandler(FileSizeLimitExceededException.class) 
public YourReturnType uploadedAFileTooLarge(FileSizeLimitExceededException e) { 
    /*...*/ 
} 

(Se questo non funziona, è necessario abilitare la gestione delle eccezioni in la tua configurazione. Normalmente Spring lo fa per impostazione predefinita.)

Problemi correlati