Spring Controller'da, bir JSON verisini Request DTO olarak almak ve aynı zamanda MultipartFile'ı @RequestPart ile almak için aşağıdaki adımları takip edebilirsiniz:
Request DTO (Data Transfer Object) oluşturma:
İlk olarak, JSON verisini request olarak alacağımız DTO sınıfını oluşturmalıyız. Örneğin, aşağıdaki gibi bir DTO sınıfı oluşturalım:
public class MyRequestDTO {
// Örnek alanlar
private String name;
private int age;
// Getter ve Setter'lar
// ...
}
Spring Controller metodunu oluşturma:
Controller metodumuzda, JSON verisini String olarak alıp, ObjectMapper ile deserialize edeceğiz ve aynı zamanda MultipartFile'ı @RequestPart ile alacağız. Aşağıdaki gibi bir Controller metodunu oluşturalım:
java
Copy code
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import com.fasterxml.jackson.databind.ObjectMapper;
@RestController
public class MyController {
@PostMapping("/processData")
public void processData(@RequestParam("jsonRequest") String jsonRequest,
@RequestPart("file") MultipartFile file) {
try {
// JSON string'i Request DTO'ya dönüştürme
ObjectMapper objectMapper = new ObjectMapper();
MyRequestDTO requestDTO = objectMapper.readValue(jsonRequest, MyRequestDTO.class);
// Burada requestDTO ve file işlemlerini yapabilirsiniz
// ...
} catch (Exception e) {
// Hata işlemleri
// ...
}
}
}
Axios ile request yapma:
Frontend'de (örneğin JavaScript ile) Axios kullanarak bu endpoint'e JSON verisini ve MultipartFile'ı gönderebiliriz. Örnek Axios çağrısı aşağıdaki gibidir:
const axios = require('axios');
const formData = new FormData();
formData.append('jsonRequest', JSON.stringify({ "name": "John", "age": 30 }));
formData.append('file', inputFile); // inputFile, seçilen dosya input elementinden alınacak
axios.post('/processData', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
}).then(response => {
// Başarılı cevap durumunda işlemler
console.log(response.data);
}).catch(error => {
// Hata durumunda işlemler
console.error(error);
});
Bu şekilde Axios ile oluşturduğumuz FormData, hem JSON verisini hem de MultipartFile'ı içerecek şekilde sunucuya gönderilecektir. Sunucu tarafında Spring Controller, JSON verisini alıp deserialize edecek ve MultipartFile'ı ayrıca alarak işlemlerini gerçekleştirecektir.