2015-04-07 62 views
0

我有收到文件簡單的控制器方法:彈出文件上傳。需要文件存在

@ResponseBody 
    public MyDto createProduct(MyDto dto, @RequestParam(value = "file") MultipartFile file) { 

    } 

的問題是,春天不會拋出異常,如果用戶沒有在形式上選擇文件。但我需要確保用戶選擇了一些文件。我試圖添加required = true,但它並沒有幫助(而且是默認設置爲true

其實春天只拋出,如果我的表格不包含名爲file在所有的參數異常:

要求MultipartFile參數「文件」不存在

但是,如果參數存在和文件沒有在HTML形式選擇,那麼沒有例外。

如何解決這個問題?

感謝

回答

1

你可以把你的MultipartFile file爲您的DTO的屬性,例如編寫自定義的驗證註解@FilePresent。您的簽名會比是這樣的

public MyDto createProduct(@Validated MyDto dto, BindingResult result) 

你會來註解你文件物業內MyDto

@FilePresent 
private MultipartFile file; 

您的自定義驗證代碼會是這樣的:

@FilePresent註釋


定製驗證


public class FilePresentMultipartFileValidator implements ConstraintValidator<FilePresent, MultipartFile> { 

    @Override 
    public void initialize(FilePresent constraintAnnotation) { 
     //NOOP 
    } 

    @Override 
    public boolean isValid(MultipartFile value, ConstraintValidatorContext context) { 
     return !(value == null || value.isEmpty()); 
    } 

} 

最終此舉是爲了對類路徑ValidationMessages.properties文件(和/或它的局部等效物),其具有鍵your.package.FilePresent.message與您選擇的留言值

相關問題