опубликовать объект в spring mvc, все поля равны нулю

#javascript #spring #validation #post #model-view-controller

#javascript #spring #проверка #Публикация #модель-представление-контроллер

Вопрос:

я хотел бы передать объект и проверить его. JavaScript:

 var pic = {
         "picture":file,
         "ext":"png"
  }

fetch(url, {
      method: 'POST',
      body: pic
    }).then(response => {
        if(response.status === 201){
            console.log('saved!!!');
            getPicture('no-cache');
        }
    })
 

Мой контроллер выглядит так:

 @PostMapping(value = "/user-pic")
    public ResponseEntity<String> submit(@Valid @ModelAttribute("pic") PictureDTO pictureDTO,
                                         BindingResult result, Model model,
                                         @AuthenticationPrincipal UserDetails userPrincipal) throws IOException {
...
}
 

Мой объект dto:

 @NoArgsConstructor
@AllArgsConstructor
@Data
public class PictureDTO {
    MultipartFile formDataWithFile;
    String pictureExtension;
}
 

И мой валидатор

 public class PictureValidator implements Validator {

...
        @Override
    public void validate(Object target, Errors errors) {
        try {
            //boths fields of this object are null
            //but validator will be triggered
            final PictureDTO pictureDTO = (PictureDTO) target;
     }
}
 

Как я могу это исправить, передать объект из java-script в валидатор, и мои файлы: MultipartFile и String больше не будут иметь значения null?

Комментарии:

1. Вы не можете передать объект для извлечения тела. Его необходимо сериализовать и установить соответствующий заголовок типа содержимого

2. я это исправил. Просто вы «создаете FormData» на стороне java-скрипта и добавляете к нему все поля. Затем вы можете установить FormData в тело запроса выборки