Spring Boot Sample Rest API

Membuat simple REST API pertama menggunakan spring boot dengan API spek berikut:

  1. Membuat dan menampilkan List Buku
  2. Membuat dan menampilkan data buku berdasarkan bookId
  1. Buat package controller seperti berikut

2. Buat class BookController

3. Buat Package model dan class BookResponse

package com.hyvercode.spring.model.response;


import java.io.Serializable;

public class BookResponse implements Serializable {

    private int bookId;
    private String bookName;

    public BookResponse(int bookId, String bookName) {
        this.bookId = bookId;
        this.bookName = bookName;
    }

    public int getBookId() {
        return bookId;
    }

    public void setBookId(int bookId) {
        this.bookId = bookId;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
}

4. Buat API “books” dan endpoint untuk menampilkan data buku dan mengambil data buku berdasarakn bookId

package com.hyvercode.spring.controller;

import com.hyvercode.spring.model.response.BookResponse;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;

@RestController
@RequestMapping("/books")
public class BookController {
    private final List<BookResponse> bookResponses = Arrays.asList(new BookResponse(1,"Java Basic"),new BookResponse(2,"Spring Boot"));

    @GetMapping(value = "",produces = MediaType.APPLICATION_JSON_VALUE)
    public List<BookResponse> getBooks(){
        return bookResponses.stream().toList();
    }

    @GetMapping(value = "/{bookId}",produces = MediaType.APPLICATION_JSON_VALUE)
    public List<BookResponse> getBook(@PathVariable("bookId") int bookId){
        return bookResponses.stream()
                .filter(bookResponse -> bookResponse.getBookId()==bookId)
                .toList();
    }
}

Selanjutnya jalankan aplikasi dengan perintah berikut:

mvn spring-boot:run

Bukan browser atau Postman akses url http://localhost:8080/books

Bukan browser atau Postman akses url http://localhost:8080/books/1

Sample source code bisa di download di github-hyvercode

hyvercode

Spring Boot First Application

Membuat aplikasi pertama dengan menggunakan Spring Boot, sebelumnya kita telah membuat project Spring Boot dengan menggunakan Spring Boot Initializr. Kali ini kita akan membuat aplikasi pertama kita dengan menggunakan project yang sebelumnya telah kita buat, tambahkan baris code berikut pada file pom.xml

<dependencies>
...
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
...
</dependencies>

Ubah Application.java (main program) menjadi seperti berikut :

@RestController
@SpringBootApplication
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

	@RequestMapping("/")
	public String first(){
		return "My First Spring Boot Application";
	}

}

Untuk menjalankan Spring Boot bisa menggunakan perintah berikut

Maven

$ mvn spring-boot:run

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v3.1.2)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Application in 0.906 seconds (process running for 6.514)

Gradle

$ gradle bootRun

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v3.1.2)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Application in 0.906 seconds (process running for 6.514)
2023-07-31T21:17:13.357+07:00  INFO 16192 --- [           main] com.hyvercode.spring.Application         : No active profile set, falling back to 1 default profile: "default"      
2023-07-31T21:17:14.302+07:00  INFO 16192 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2023-07-31T21:17:14.313+07:00  INFO 16192 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-07-31T21:17:14.314+07:00  INFO 16192 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.11]
2023-07-31T21:17:14.434+07:00  INFO 16192 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-07-31T21:17:14.435+07:00  INFO 16192 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1017 ms
2023-07-31T21:17:14.777+07:00  INFO 16192 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-07-31T21:17:14.786+07:00  INFO 16192 --- [           main] com.hyvercode.spring.Application         : Started Application in 1.851 seconds (process running for 2.245)

Jika tidak terjadi kesalahan saat menjalankan Spring Boot maka kita bisa akses lewat browser localhost:8080

Jika kita lihat pada class main jaba kita menambahkan @RestController dan @RequestMapping, ini adalah stereotype annotation, @RestController adalah anotasi yang memberi tahu Spring untuk merender string yang dihasilkan langsung kembali ke pemanggil. sedangkan @RequestMappinf(“/”) sebagai routing HTTP request / path untuk mengeksekusi methoe firts() yang telah kita buat.

Membuat Execute Jar

Untuk membuat file execute jar, kita harus menambahkan denpedency spring-boot-maven-plugin pada file pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

jalankan perintah berikut mvn package

$ mvn package

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] .... ..
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/spring-boot-tutorial-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:3.1.2:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

Buka folder target maka kita akan mendapatkan file spring-boot-tutorial-0.0.1-SNAPSHOT.jar untuk memperkecil file tersebut jalankan perintah berikut “:

$ jar tvf target/spring-boot-tutorial-0.0.1-SNAPSHOT.jar

Sekarang kita bisa menjalakan file jar dengan melakukan perintah seperti perintah menjalankan file jar pada aplikasi java umumnya :

$ java -jar target/spring-boot-tutorial-0.0.1-SNAPSHOT.jar
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v3.1.2)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Application in 0.999 seconds (process running for 1.253)

Jika tidak terjadi kesalahan maka kita bisa mengakses lewat browser localhost:8080

Sample source code bisa di download di github-hyvercode

hyvercode

Spring Boot Introduction

Spring muncul pada tahun 2003 sebagai respons terhadap kompleksitas spesifikasi J2EE . Sementara beberapa orang menganggap Java EE dan Spring berbeda, Spring pada kenyataannya adalah pelengkap bagi Java EE. Model pemrograman Spring tidak mencakup spesifikasi platform Java EE melainkan, terintegrasi dengan spesifikasi individual yang dipilih dengan cermat :

(more…)

hyvercode

Spring Web + Bootstrap 5.1

Hai hyvercoder! kali ini kita akan membuat aplikasi Spring web application dengan framework css yang sudah umum yaitu Bootstratp 5.1 dimana aplikasi ini berisikan data tamu atau member, aplikasi kali ini akan mengunakan

  • Spring Web Application
  • Thymeleaf
  • Bootstrap 5.1
  • Java 8/11
  • Maven

Buat project spring boot menggunakan Spring Initializr dependency yang akan kita gunakan adalah :

  • spring-boot-starter-thymeleaf
  • spring-boot-starter-web
  • bootstrap

Install dependencies dengan perintah mvn clean install, tanpilan struktur project seperti berikut

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>5.1.3</version>
</dependency>

</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

Sekarang kita buat file html pada dir resources-templates

index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" th:href="@{webjars/bootstrap/5.1.3/css/bootstrap.min.css}"/>
    <link rel="stylesheet" th:href="@{/css/styles.css}"/>
    <title>Belajar Spring Boot Web</title>
</head>
<body>
    <div class="container">
        <h1>Buku Tamu</h1>
        <a class="btn btn-primary" href="/bukutamu" >Buku Tamu</a>
        <a class="btn btn-primary" href="/daftar-bukutamu" >List Buku Tamu</a>
    </div>
</body>

<script type="text/javascript" th:src="@{webjars/bootstrap/5.1.3/js/bootstrap.min.js}"></script>
</html>

bukutamu.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" th:href="@{webjars/bootstrap/5.1.3/css/bootstrap.min.css}"/>
    <link rel="stylesheet" th:href="@{/css/styles.css}"/>
    <title>Belajar Spring Boot Web</title>
</head>
<body>
    <div>
        <div class="container">
            <a href="/"><h1>Buku Tamu</h1></a>
            <form action="/bukutamu/simpan" method="post">
          
              <label for="fname">Nama</label>
              <input type="text" class="form-control" id="fname" name="firstname" placeholder="Masukan nama">
          
              <label for="lname">Telepon</label>
              <input type="text" id="lname" name="lastname"  class="form-control" placeholder="Masukan nomor telepon">
            
              <label for="subject">Alamat</label>
              <textarea id="subject" name="subject"  class="form-control" placeholder="Masukan alamat"></textarea>
          
              <input class="btn btn-primary" type="submit"  value="Submit">
          
            </form>
          </div>
    </div>
</body>
<script type="text/javascript" th:src="@{webjars/bootstrap/5.1.3/js/bootstrap.min.js}"></script>
</html>

daftar-bukutamu.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" th:href="@{webjars/bootstrap/5.1.3/css/bootstrap.min.css}"/>
    <link rel="stylesheet" th:href="@{/css/styles.css}"/>
    <title>Belajar Spring Boot Web</title>
</head>
<body>
    <div class="container">
        <a href="/"><h1>Daftar Buku Tamu</h1></a>
        <table class="table">
            <thead>
              <tr>
                <th>Nama</th>
                <th>Telepom</th>
                <th>Alamat</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>John</td>
                <td>087885876037</td>
                <td>Cisauk Tangerang Selatan</td>
              </tr>
              <tr>
                <td>Mary</td>
                <td>087885876045</td>
                <td>Cisauk Tangerang Selatan</td>
              </tr>
              <tr>
                <td>July</td>
                <td>021-5098680</td>
                <td>Cisauk Tangerang Selatan</td>
              </tr>
            </tbody>
          </table>
    </div>
</body>

<script type="text/javascript" th:src="@{webjars/bootstrap/5.1.3/js/bootstrap.min.js}"></script>
</html>

Setelah kita membuat file ht kita juga bisa menambahkan custom css yaitu dengan cara membuat file css pada directory resources-static-css seperti berikut :

styles.css

h1{
    color:red;
}

selain file css, kita juga bisa menambahkan file js (javascript) pada directory yang sama.

Sekarang kita masuk ke controller dimana controller ini berfungsi sebagai pengatur atau navigation , selain itu juga file controller inilah yang nantinya akan digunakan sebagai file java / class java yang bertugas mengelola logic aplikasi yang kita buat, buka class Main aplikasi ini class main adalaha class DemoApplication, kemudain tambahn route controller sebagai berikut :

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@SpringBootApplication
@Controller
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}


	@GetMapping("/")
	public String index(){
		return "index.html";
	}

	@GetMapping("/bukutamu")
	public String book(){
		return "bukutamu.html";
	}

	@GetMapping("/daftar-bukutamu")
	public String daftar(){
		return "daftar-bukutamu.html";
	}
}

pada class ini terdapat @Controller atau Annotation yang menandakan bahwa class ini digunakan sebagai controller index,bukutamu dan daftar-bukutamu dimana methode yang digunakan adalah GET , bisa kita lihat pada methode yang dibuat mengunakan Annotaion @GetMapping . dan mengembalikan nilai yaitu file-file html yg sebelumnya telah kita buat. Setelah itu sekarang kita coba jalankan aplikasi kita dengan perintan mvn spring-boot:run, jika tidak ada kesalahan makan akan terlihan halam index seperti berikut :

http://localhost:8080/

disini kita sudah melihat framewrok bootstrap sudah teintegrasi dengan thymeleaf bisa dilihat dari button yang digunakan adalah class button dari bootstrap dan file css yang kita buat juga terlihat pada h1 dengan warna merah.

Jikakedua button kita klick makan akan menmapilkan halaman seperti berikut :

http://localhost:8080/bukutamu

http://localhost:8080/daftar-bukutamu

The project source code can be downloaded on the GitHub   spring-boot-web-bootstrap

hyvercode