@Valid не работает, когда в Spring используется @RequestPart - PullRequest
0 голосов
/ 06 ноября 2018

@Valid аннотация не вызывает валидатор, когда используется @RequestPart. В других местах я использовал @Valid с @RequestBody, и он отлично работает. Также нет ошибки, просто пройдя неправильную проверку.

Ниже приведен код.

@InitBinder("campaignCreatorDTO")
public void initCreatorDTOBinder(WebDataBinder binder) {

    binder.addValidators(new CreatorDTOValidator());
}

@PostMapping(value = "/creator", consumes = {"multipart/form-data"}, produces = {"application/json"})
@ResponseBody
@ResponseStatus(HttpStatus.CREATED)
public @Valid
ResponseDTO creator(@Valid @RequestPart("json") CampaignCreatorDTO campaignCreatorDTO,
                    @RequestPart(name = "file", required = false) MultipartFile adGraphic) {
}

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Подробно здесь , @InitBinder использует значение, переданное ему для целевой проверки с такими же именованными параметрами запроса или атрибутами модели. Проблема в том, что у вас нет ни того, ни другого, так как вы используете многочастный ввод данных в вашей конкретной конечной точке /creator. Поэтому устранение ограничения именования из @InitBinder было бы решением.

@InitBinder
public void initCreatorDTOBinder(WebDataBinder binder) { ... }
0 голосов
/ 06 ноября 2018

Запуск проверки в методе контроллера с использованием Bean-компонента Validator:

org.springframework.validation.Validator

@Autowired
protected Validator validator;

PostMapping(value = "/creator", consumes = {"multipart/form-data"}, produces = {"application/json"})
@ResponseBody
@ResponseStatus(HttpStatus.CREATED)
public @Valid
ResponseDTO creator(@RequestPart("json") CampaignCreatorDTO campaignCreatorDTO,
                    @RequestPart(name = "file", required = false) MultipartFile adGraphic) {
    validator.validate(campaignCreatorDTO);
}
...