2017-02-28 30 views
0

我試圖建立一個自定義的驗證檢查使用SpringValidator一個MultipartFile,但我面對這個問題:定製驗證到MultipartFile

An Errors/BindingResult argument is expected to be declared immediately after the model attribute, the @RequestBody or the @RequestPart arguments to which they apply: public org.springframework.web.context.request.async.DeferredResult br.com.mobtrack.api.resource.CityResource.uploadImage(org.springframework.web.multipart.MultipartFile,org.springframework.validation.BindingResult) 

這是我的Validator類:

@Component 
public class MultipartFileValidator implements Validator{ 

    @Override 
    public boolean supports(Class<?> aClass) { 
     return MultipartFile.class.isAssignableFrom(aClass); 
    } 

    @Override 
    public void validate(Object o, Errors errors) { 
     MultipartFile file = (MultipartFile) o; 
     if (file == null || file.isEmpty()){ 
      errors.reject("image","send a valid image.); 
     } 
    } 
} 

這是我RestController

@PostMapping("/image") 
    public DeferredResult<String> uploadImage(@Valid MultipartFile image, BindingResult result) { 

     if (result.hasErrors()) { 
      throw new ImageNotFoundException("test"); 
     } else { 
      DeferredResult<String> deferredResult = new DeferredResult<>(); 

      Thread thread = new Thread(new ImageStorageRunnable(image, deferredResult, imageStorage)); 
      thread.start(); 
      return deferredResult; 
     } 
    } 

回答

0

「BindingResult的說法,預計在模型屬性之後立即宣佈,在@RequestBody或@RequestPart參數對其適用」

它無關驗證。它似乎與控制器。

它似乎在告訴你這個問題。您需要使用@RequestBody或@RequestPart註釋來告訴它在哪裏查找要綁定的數據。

+0

我已經嘗試了兩種,但沒有工作。 –

+0

試過他們如何。他們不在提供的例子中。他們是否立即在消息中描述的模型之後?當你這樣做時發生了什麼?錯誤發生了同樣的錯誤?只是說「不起作用」或「出錯」並沒有給任何人處理任何事情。 – BrianC