#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 в тело запроса выборки