Pastikan sudah ada ada koneksi ke db dengan contoh sederhana disini: https://undebugable.blogspot.com/2025/07/setup-postgresql-dan-quarkus-dengan.html.
Berikut contoh sederhana namun powerful untuk Quarkus REST API CRUD pada entitas User. Contoh ini menggunakan resource, DTO, dan service layer agar mudah dikembangkan ke depannya.
Penjelasan singkat:
- UserResource: REST endpoint untuk CRUD.
- UserService: Logika bisnis CRUD.
- UserDTO: Data transfer object untuk input/output.
- Gunakan dependency injection dan response yang sesuai.
build.gradle
dependencies {
...
implementation 'io.quarkus:quarkus-rest-jackson'
...
}
User.java
package com.yoesoff.plate.entity;
import io.quarkus.hibernate.orm.panache.PanacheEntity;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
@Entity
@Table(name = "app_users")
public class User extends PanacheEntity {
public String username;
public String password;
public String email;
// Default constructor
public User() {
}
// Constructor with parameters
public User(String username, String password, String email) {
this.username = username;
this.password = password;
this.email = email;
}
// Getters and setters can be added if needed
}
UserDTO.java
package com.yoesoff.plate.dto;
public class UserDTO {
public Long id;
public String username;
public String email;
}
UserService.java
package com.yoesoff.plate.service;
import com.yoesoff.plate.entity.User;
import com.yoesoff.plate.dto.UserDTO;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.transaction.Transactional;
import java.util.List;
import java.util.stream.Collectors;
@ApplicationScoped
public class UserService {
public List<UserDTO> listAll() {
return User.listAll().stream()
.map(entity -> toDTO((User) entity))
.collect(Collectors.toList());
}
public UserDTO findById(Long id) {
User user = User.findById(id);
return user != null ? toDTO(user) : null;
}
@Transactional
public UserDTO create(UserDTO dto) {
User user = new User(dto.username, "default", dto.email);
user.persist();
return toDTO(user);
}
@Transactional
public UserDTO update(Long id, UserDTO dto) {
User user = User.findById(id);
if (user == null) return null;
user.username = dto.username;
user.email = dto.email;
return toDTO(user);
}
@Transactional
public boolean delete(Long id) {
return User.deleteById(id);
}
private UserDTO toDTO(User user) {
UserDTO dto = new UserDTO();
dto.id = user.id;
dto.username = user.username;
dto.email = user.email;
return dto;
}
}
UserResource.java
package com.yoesoff.plate.resource;
import com.yoesoff.plate.dto.UserDTO;
import com.yoesoff.plate.service.UserService;
import jakarta.inject.Inject;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import java.util.List;
@Path("/users")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class UserResource {
@Inject
UserService userService;
@GET
public List<UserDTO> list() {
return userService.listAll();
}
@GET
@Path("/{id}")
public Response get(@PathParam("id") Long id) {
UserDTO user = userService.findById(id);
if (user == null) return Response.status(Response.Status.NOT_FOUND).build();
return Response.ok(user).build();
}
@POST
public Response create(UserDTO dto) {
UserDTO created = userService.create(dto);
return Response.status(Response.Status.CREATED).entity(created).build();
}
@PUT
@Path("/{id}")
public Response update(@PathParam("id") Long id, UserDTO dto) {
UserDTO updated = userService.update(id, dto);
if (updated == null) return Response.status(Response.Status.NOT_FOUND).build();
return Response.ok(updated).build();
}
@DELETE
@Path("/{id}")
public Response delete(@PathParam("id") Long id) {
boolean deleted = userService.delete(id);
if (!deleted) return Response.status(Response.Status.NOT_FOUND).build();
return Response.noContent().build();
}
}
Postman
curl --location 'http://localhost:8080/users' \
--header 'Content-Type: application/json' \
--data-raw '{
"username": "testuser",
"email": "testuser@example.com"
}'
Comments
Post a Comment