Beragam Jenis Response di Spring Boot: Tidak Selalu JSON
Ketika mendengar Spring Boot, banyak developer langsung mengasosiasikannya dengan REST API dan JSON. Hal ini tidak salah, karena Spring Boot memang sangat populer untuk membangun layanan API modern.
Namun, sebenarnya Spring Boot dapat mengembalikan berbagai jenis response, mulai dari JSON, XML, plain text, HTML, file download, gambar, hingga streaming data.
Memahami berbagai jenis response ini penting agar kita dapat memilih format yang paling sesuai dengan kebutuhan aplikasi.
1. Response JSON
JSON adalah format response yang paling umum digunakan dalam REST API.
Contoh:
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/user")
public User getUser() {
return new User("Sena", "Administrator");
}
}
Class:
public class User {
private String name;
private String role;
public User(String name, String role) {
this.name = name;
this.role = role;
}
public String getName() {
return name;
}
public String getRole() {
return role;
}
}
Response:
{
"name": "Sena",
"role": "Administrator"
}
Spring Boot secara otomatis menggunakan Jackson untuk mengubah objek Java menjadi JSON.
2. Response Plain Text
Kadang kita hanya ingin mengembalikan teks sederhana.
Contoh:
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello World";
}
}
Response:
Hello World
Biasanya digunakan untuk:
- Health check sederhana
- Endpoint testing
- Pesan status ringan
3. Response HTML
Spring Boot juga dapat digunakan untuk membuat aplikasi web tradisional.
Contoh:
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
}
Spring akan mencari file:
src/main/resources/templates/home.html
Misalnya:
<html>
<body>
<h1>Selamat Datang</h1>
</body>
</html>
Browser akan menerima halaman HTML tersebut.
4. Response XML
Beberapa sistem legacy masih menggunakan XML.
Contoh:
@GetMapping(
value = "/user/xml",
produces = MediaType.APPLICATION_XML_VALUE
)
public User getUserXml() {
return new User("Sena", "Admin");
}
Response:
<User>
<name>Sena</name>
<role>Admin</role>
</User>
Biasanya digunakan untuk:
- Integrasi sistem lama
- SOAP Service
- Sistem pemerintahan atau enterprise tertentu
5. Response Menggunakan ResponseEntity
ResponseEntity memberikan kontrol penuh terhadap response.
Contoh:
@GetMapping("/status")
public ResponseEntity<String> status() {
return ResponseEntity.ok("Service Running");
}
Response:
HTTP/1.1 200 OK
Service Running
Contoh dengan custom status:
@GetMapping("/notfound")
public ResponseEntity<String> notFound() {
return ResponseEntity
.status(HttpStatus.NOT_FOUND)
.body("Data tidak ditemukan");
}
Response:
HTTP/1.1 404 Not Found
Data tidak ditemukan
6. Response File Download
Spring Boot dapat digunakan untuk mengunduh file.
Contoh:
@GetMapping("/download")
public ResponseEntity<Resource> download() throws Exception {
Path path = Paths.get("/tmp/manual.pdf");
Resource resource =
new UrlResource(path.toUri());
return ResponseEntity.ok()
.header(
HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=manual.pdf"
)
.body(resource);
}
Browser akan otomatis menawarkan file untuk diunduh.
Cocok untuk:
- Excel
- ZIP
- CSV
- Dokumen lainnya
7. Response CSV
Kadang data perlu diekspor ke Excel.
Contoh:
@GetMapping(
value = "/report",
produces = "text/csv"
)
public String exportCsv() {
return """
Nama,Role
Sena,Admin
Budi,User
""";
}
Response:
Nama,Role
Sena,Admin
Budi,User
Sangat umum digunakan pada fitur reporting.
8. Response Gambar
Spring Boot dapat mengirim file gambar secara langsung.
Contoh:
@GetMapping(
value = "/logo",
produces = MediaType.IMAGE_PNG_VALUE
)
public byte[] logo() throws IOException {
return Files.readAllBytes(
Paths.get("logo.png")
);
}
Browser akan langsung menampilkan gambar.
9. Response Streaming
Untuk data yang sangat besar, streaming lebih efisien.
Contoh:
@GetMapping("/stream")
public StreamingResponseBody stream() {
return outputStream -> {
for(int i = 1; i <= 1000; i++) {
outputStream.write(
("Data-" + i + "\n").getBytes()
);
outputStream.flush();
Thread.sleep(100);
}
};
}
Cocok untuk:
- Log realtime
- Export data besar
- Monitoring
10. Redirect Response
Spring Boot dapat mengarahkan pengguna ke URL lain.
Contoh:
@GetMapping("/google")
public String redirectGoogle() {
return "redirect:https://www.google.com";
}
Browser akan langsung diarahkan ke alamat tujuan.
11. Response JSON Error yang Terstruktur
Praktik terbaik API modern adalah mengembalikan error dalam format JSON.
Contoh:
@GetMapping("/user/{id}")
public ResponseEntity<?> findUser(
@PathVariable Long id) {
if(id != 1) {
return ResponseEntity
.status(HttpStatus.NOT_FOUND)
.body(Map.of(
"success", false,
"message", "User tidak ditemukan"
));
}
return ResponseEntity.ok(
Map.of(
"success", true,
"name", "Sena"
)
);
}
Response:
{
"success": false,
"message": "User tidak ditemukan"
}
Format seperti ini jauh lebih mudah diproses oleh frontend maupun chatbot.
Kapan Menggunakan Masing-Masing?
| Jenis Response | Kegunaan |
|---|---|
| JSON | REST API, Mobile App, Frontend SPA |
| Plain Text | Health Check, Testing |
| HTML | Website Tradisional |
| XML | Integrasi Legacy |
| File Download | PDF, Excel, ZIP |
| CSV | Reporting |
| Image | Menampilkan Gambar |
| Streaming | Data Besar dan Realtime |
| Redirect | Navigasi URL |
| ResponseEntity | Kontrol Lengkap Response |
Kesimpulan
Banyak developer pemula menganggap bahwa Spring Boot selalu menghasilkan JSON. Kenyataannya, Spring Boot adalah framework yang sangat fleksibel dan mampu mengembalikan hampir semua jenis response HTTP yang dibutuhkan aplikasi modern.
JSON memang menjadi standar utama dalam pengembangan API saat ini, namun memahami berbagai alternatif response seperti HTML, XML, file download, streaming, dan ResponseEntity akan membuat kita lebih siap menghadapi berbagai kebutuhan integrasi maupun pengembangan aplikasi enterprise.
Published by Nirantara
Nirantara is an Indonesian Enterprise AI company specializing in Enterprise AI, RAG, Intelligent Search, and AI Automation. Article written by jsturana.