2017-02-28 4 views
0

Ich versuche, einen benutzerdefinierten Validator zu bauen ein MultipartFile mit SpringValidator, um zu überprüfen, aber ich bin vor dieser Frage:Individuelle Validator 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) 

Das ist mein Validator-Klasse:

@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.); 
     } 
    } 
} 

Das ist mein 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; 
     } 
    } 

Antwort

0

„wird BindingResult Argument erwartet unmittelbar nach dem Modell Attribut deklariert werden, gelten die @RequestBody oder die @RequestPart Argumente, auf die sie“

Es hat nichts mit dem Validator zu tun hat. Es scheint mit dem Controller zu sein.

Es scheint Ihnen das Problem zu sagen. Sie müssen die @RequestBody- oder die @RequestPart-Annotationen verwenden, um anzugeben, wo nach den zu bindenden Daten gesucht werden soll.

+0

Ich habe schon beide versucht, aber nicht arbeiten. –

+0

Versuchte sie wie. Sie sind nicht im Beispiel enthalten. Sind sie unmittelbar nach dem Modell wie in der Nachricht beschrieben? Was ist passiert, als du das getan hast? Gleicher Fehler hat sich der Fehler geändert? Nur zu sagen "geht nicht" oder "habe einen Fehler", gibt niemandem etwas, mit dem man arbeiten könnte. – BrianC