Srping boot 2.x и vue 2.x.
Мой интерфейс выглядит (не полная картина для простоты):
мой Java-бин:
public class Attachment {
private Integer eaId;
private Integer eId;
private String description;
private MultipartFile file;
//setters and getters
}
public class Booking {
private Integer id;
private String eNo;
private List<Attachment> attachmentList;
//some other fields
}
Каждый attachment
элемент содержит file
и file description
.
Мой интерфейс:
<tr v-for=" (a, index) in eb.attachmentList" v-bind:key="index">
<td><input type="text" v-model="a.description" /></td>
<td><input type="file" v-on:change="selectFile(index, $event)" /></td>
<td><i class="far fa-trash-alt fa-lg" v-on:click="delAttachment(index)" style="color: red"></i>
</td>
</tr>
мой контроллер пружины:
@PostMapping("/upload")
public Booking upload(@ModelAttribute Booking b) {
//....
}
код vue
:
var vm = new Vue({
el: '#test',
data() {
return {
eb: {
'attachmentList': []
}
}
},
methods: {
selectFile(index, e) {
this.eb.attachmentList[index].file = e.target.files[0];
},
saveTest() {
var formData = new FormData();
//how to populate formData ?
axios.post("/tf/upload",
formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
}
).then(function() {
//....
})
.catch(function(error) {
//...
});
}
}
});
Я хочу отправить эти данные формы в контроллер пружины сaxios, то есть конвертирует данные формы в Java-бин Booking
и список файлов формы в List<Attachment> attachmentList
из Booking
.
Кажется, я должен использовать FormData
, верно?
Мои проблемы :
Как заполнить FormData
в моем случае?
Если просто загрузить файл, я могу использовать formData.append('file', file)
, а затем опубликовать его с заголовком multipart/form-data
напрямую.
Но теперь есть несколько файлов и каждый файл, связанный с его описанием. Я не знаю, как сделать так, чтобы я мог получить данные формы в моем контроллере пружины.