Twitter Youtube Github
Burak Kutbay'ın Kişisel Blog'u |

Type and hit Enter to search

  • Etkinliklerim
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • RabbitMQ
  • Hibernate
  • JSP
  • Java 21
  • Java 8
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale
Spring BootSpring Boot 3.0

Spring Boot 3.0 ile Gelen Problem Details Kullanımı ve Uygulama Örneği

Paylaş

Spring Boot 3.0 ile gelen yeni gelen Problem Details sınıfından bahsedeceğim.

İçindekiler

Toggle
  • ProblemDetail Nedir?
    • Problem Detail Sınıfı
  • Uygulama Örneği
    • ExecptionHandling ve ProblemDetails Implementasyonu
  • Uygulama Örneğini İndir

ProblemDetail Nedir?

Spring Boot 3.0 ile Gelen Problem Details Kullanımı ve Uygulama Örneği

Uygulamalarımızda Exception Handling yaparken bu hataları istemciye bildirmek için sınıflar kullanırız. Bu özellik gelmeden önce hata mesajını döndürdüğümüzde kendi sınıfımızı ve alanlarımızı kendimizin oluşturması gerekiyor. Bu sınıfların alanları ve içereceği değerler yazılımcının insifiyatine kalmaktadır.

Yeni gelen bu özellik sayesinde Hata mesajları için Spring Framework’ün ProblemDetail‘i kullanarak, birbiriyle iletişim servislerimizin yanıt biçimini standartlaştırabiliriz.

Problem Detail Sınıfı

Sınıfın içeriğinde kullanabileceğimiz alanlar aşağıdaki gibidir bu sınıfın alanları kullanarak kolay bir şekilde hata responslarımızı doldurarak cevap verebiliriz.

private URI type;
private String title;
private int status;
private String detail;
private URI instance;
private Map<String, Object> properties;Code language: PHP (php)

Uygulama Örneği

Bir Student sınıfı içeren ve bir list içerisinde tutan basit bir rest api yapacağız.

Modelimiz aşağıdaki şekilde olacak.

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private String name;
    private String surName;
    private String schoolNumber;
    private String schoolName;
}Code language: Java (java)

Controller sınfımızda bir kaydetme ve bir de okul numarasına göre arama işlemini yapacağız.

@RestController
public class StudentController {

    @Autowired
    StudentService studentService;

    @PostMapping("/")
    public Student save(@RequestBody Student student) {
        return studentService.add(student);
    }

    @GetMapping("/{schoolNumber}")
    public Student getStudent(@PathVariable String schoolNumber) throws StudentNotFoundException {
        return studentService.getStudent(schoolNumber);
    }
}Code language: Java (java)

Servisimizi yazalım.

@Service
public class StudentService {

    private List<Student> studentList = new ArrayList<>();

    public Student add(Student student) {
        studentList.add(student);
        return student;
    }

    public Student getStudent(String schoolNumber) {
        return studentList.stream()
                .filter(student -> student.getSchoolNumber().equals(schoolNumber))
                .findFirst().get();
    }
}
Code language: Java (java)

Şimdi bir istek yollayalım.

{
  "name": "John",
  "surName": "Doe",
  "schoolNumber": 1234567890,
  "schoolName": "İstanbul Üniversitesi"
}Code language: JSON / JSON with Comments (json)

Bu şimdi var olmayan bir okul numarasına göre istek attığımızda ki gelen hataya bakalım.

{
    "timestamp": "2023-07-18T13:03:34.666+00:00",
    "status": 500,
    "error": "Internal Server Error",
    "path": "/1234567890a"
}Code language: JSON / JSON with Comments (json)

Hata mesajında varsayılan olarak Bad Request işaretlenmiş olarak geldi. Bu çok açıklayıcı değil. Şimdi Exception Hanling yapalım ve hata dönüş cevabımızı ProblemDetaile göre doldurarak cevap verelim.

ExecptionHandling ve ProblemDetails Implementasyonu

Şimdi bir StudentNotFoundException sınıfı oluşturalım.

public class StudentNotFoundException extends RuntimeException {
    public StudentNotFoundException(String schoolNumber) {
        super("Student Not Found! " + schoolNumber);
    }
}Code language: JavaScript (javascript)

Sonrasında servisimize bir hata fırlatacak kodu ekleyelim.

@Service
public class StudentService {
     ...
     ...
     public Student getStudent(String schoolNumber) {
     return studentList.stream()
                .filter(student -> student.getSchoolNumber().equals(schoolNumber))
                .findFirst()
                .orElseThrow(() -> new StudentNotFoundException(schoolNumber));
    }
}
Code language: Java (java)

Şimdi ise GlobalExceptionHandler sınıfımızı kullanalım ve ProblemDetail kullanarak vereceğimiz hata mesajımızı gerekli olan bilgileri dolduralım.

@RestControllerAdvice
public class GlobalExceptionHandler{
    
    @ExceptionHandler(StudentNotFoundException.class)
    public ProblemDetail studentNotFoundException(StudentNotFoundException e) {
        ProblemDetail problemDetail = ProblemDetail.forStatusAndDetail(HttpStatus.NOT_FOUND, e.getMessage());
        problemDetail.setTitle("Student not found!");
        problemDetail.setType(URI.create("https://http.cat/status/404"));
        problemDetail.setProperty("errorCategory", "Generic");
        problemDetail.setProperty("timestamp", Instant.now());
        return problemDetail;
    }
}
Code language: Java (java)

ProblemDetail sınıfı sayesinde dönüş alanlarımızı belirli bir standarta getirmiş olduk. Tüm alanları kullanıp, kullanmamak bizim elimizde olup kullandığımızda ise alanlarımızın aynı olduğunu her zaman koruyoruz ve bizi fazladan bir sınıf yazma zahmetini de ortadan kalkıyor.

Şimdi yine geçersiz bir istek attıktan sonra çıkan sonuca bakalım.

{
    "type": "https://http.cat/status/404",
    "title": "Student not found!",
    "status": 404,
    "detail": "Student Not Found! 1234567890a",
    "instance": "/1234567890a",
    "errorCategory": "Generic",
    "timestamp": "2023-07-18T13:19:48.619101Z"
}Code language: JSON / JSON with Comments (json)

Uygulama Örneğini İndir

Projenin Kaynak Kodlarına Ulaş

Tags:

Exception Handlinghata mesajlarıproblem detail sınıfıProblem Detailsspring bootspring boot 3.0 problem detail

Paylaş

Diğer Yazılar

Amdahl Yasası Nedir? Thread Performans Sınırlaması
Previous

Amdahl Yasası Nedir? Thread Performans Sınırlaması

Java 21 String Templates Nedir Java 21 Özellikleri
Next

Java 21 – String Templates Nedir? (JEP 430)

Next
Java 21 String Templates Nedir Java 21 Özellikleri
25 Temmuz 2023

Java 21 – String Templates Nedir? (JEP 430)

Previews
20 Mayıs 2023

Amdahl Yasası Nedir? Thread Performans Sınırlaması

Amdahl Yasası Nedir? Thread Performans Sınırlaması

No Comment! Be the first one.

Bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İlgini Çekebilir

Spring Boot Dersleri

Spring Boot Projelerinde Tomcat Yerine Jetty Kullanmak

Spring Boot GraphQL API Kullanımı

Spring Boot GraphQL API Uygulama Örneği #1

Spring Boot Dersleri

Spring Boot Bean Validation Uygulama Örneği

Spring Boot Hatası Çözümü

Spring boot error:Inferred type ‘S’ for type parameter ‘S’ is not within its bound; should extend Hatası Çözümü

Burak Kutbay'ın Kişisel Blog'u |

© 2008 - ∞, Her hakkı saklıdır.

Link

  • Hakkımda
  • İletişim
  • Arşiv

Kategori

Cloud
Node.js
Java 24
Android
Struts
Röportaj
Gradle
Amazon Web Services
Vue.js
Video
Redis
Spring Boot 3.0
Debezium
Mikroservis Mimarisi
Spring Native
Spring Cloud Stream
Etkinlikler
XCode
JPA
Objective C
iPhone Uygulama Geliştirme
PostgreSQL
Spring Security
MongoDB
Java 21
Spring Data
Apache Kafka
Yaptığım Projeler
Servlet
Git
Maven
Design Patterns
DevOps
Linux
Spring Jdbc Template
RabbitMQ
JDBC
PrimeFaces
Manset
Google
Spring
Spring MVC
Spring Cloud
OCA Java SE 8
Quarkus
Spring Core
Microsoft
Veritabanı
Java SE
Tanıyalım
Hibernate
Teknoloji
Okuduğum Kitaplar
Java Server Faces
Yazılım Mühendisliği
C Sharp
Spring Boot
Java
Günlüğüm
Java Server Page
Makale

Takip Et

Twitter Youtube Github
  • Etkinliklerim
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • RabbitMQ
  • Hibernate
  • JSP
  • Java 21
  • Java 8
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale