Kembali ke Beranda
Web Development

Beragam Jenis Response di Spring Boot: Tidak Selalu JSON

Spring Boot tidak selalu mengembalikan JSON. Framework ini mendukung berbagai jenis response seperti JSON, plain text, HTML, XML, file download, CSV, gambar, streaming, redirect, hingga response HTTP yang sepenuhnya dapat dikustomisasi menggunakan ResponseEntity.

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:

  • PDF
  • 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 ResponseKegunaan
JSONREST API, Mobile App, Frontend SPA
Plain TextHealth Check, Testing
HTMLWebsite Tradisional
XMLIntegrasi Legacy
File DownloadPDF, Excel, ZIP
CSVReporting
ImageMenampilkan Gambar
StreamingData Besar dan Realtime
RedirectNavigasi URL
ResponseEntityKontrol 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.

spring bootjavarest apijsonresponseentityspring mvcbackend developmentjava tutorialapi developmententerprise applicationnirantaraprogrammingsoftware engineering
Nirantara Logo

Published by Nirantara

Nirantara is an Indonesian Enterprise AI company specializing in Enterprise AI, RAG, Intelligent Search, and AI Automation. Article written by jsturana.

Learn more about Nirantara