2017-02-28 29 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