Раньше я отправлял поле списка в формате JSON, поэтому для решения этой задачи было достаточно специального конвертера. Но для файлов это не сработает. Итак, я нашел этот ответ о том, как обрабатывать POST массивов/списков объектов (они использовали NextJS в качестве бэкэнда), и я хотел бы сделать что-то подобное для Spring, но также не могу найти никаких ответов. Вот пример того, как должен выглядеть запрос:

Или, если вам нужен пример JS:
Код: Выделить всё
function createFormData() {
const formDate = new FormData()
formDate.append('name', 'test')
formDate.append('logo', new File([''], 'test.png'))
formDate.append('link', 'test')
formDate.append('contacts[0][name]', 'test')
formDate.append('contacts[0][email]', 'test')
formDate.append('contacts[0][icon]', new File([''], 'test.png'))
formDate.append('contacts[1][name]', 'test')
formDate.append('contacts[1][email]', 'test')
formDate.append('contacts[1][icon]', new File([''], 'test.png'))
return formDate
}
Код: Выделить всё
Invalid property 'contacts[0][email]' of bean class [com.example.trilha.dto.PartnerRequest]: Illegal attempt to get property 'contacts' threw exceptionМой маршрут следующий:
Код: Выделить всё
@PostMapping(value = "createPartner", consumes = "multipart/form-data")
public ResponseEntity createPartner(
@ModelAttribute PartnerRequest partnerRequest
)
Код: Выделить всё
record Contacts(
String name,
String email,
MultipartFile icon
) {}
public record PartnerRequest(
String name,
MultipartFile logo,
String link,
List contacts
){}
У меня сейчас нет внешнего интерфейса, я сначала создаю и тестирую API, прежде чем создавать интерфейс.
Изменение ModelAttribute на RequestParam не решает проблему, поскольку Spring попытается прочитать как JSON (поэтому не будет обрабатывать загрузку файла)

Подробнее здесь: https://stackoverflow.com/questions/791 ... pring-boot
Мобильная версия