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

Type and hit Enter to search

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

Spring Boot Dersleri – Exception Handling

Paylaş

Spring Boot Dersleri‘ne devam ediyoruz.

Spring Boot uygulamalarımızda Rest API’lerimizde oluşan hataları yakalayıp istemci tarafına anlamlı mesajlar göndermek, sunucu tarafında kayıt altına almak için oluşabilecek hataları ele alma ve hatalara göre istenilen işlemlere ve istisna durumlarına bakacağız.

Bir üye bilgilerini içeren örnek yapacağız.

@XmlRootElement(name = "uye")
@XmlAccessorType(XmlAccessType.FIELD)
public class Uye extends ResourceSupport implements Serializable
{
    private static final long serialVersionUID = 1L;
     
    public Uye(Integer id, String firstName, String lastName, String email) {
        super();
        this.Id = id;
        this.adi = adi;
        this.soyadi = soyadi;
        this.email = email;
    }
 
    public Uye() {
    }
 
    private Integer Id;
 
    @NotEmpty(message = "Ad alanı boş geçilemez")
    private String adi;
 
    @NotEmpty(message = "Soyad alanı boş geçilemez")
    private String soyadi;
 
    @NotEmpty(message = "Email alanı boş geçilemez")
    @Email(message = "Email adresinizi dogrulayınız")
    private String email;
     
    
}

Uye classımızın değişkenlerini oluştururken üstüne yazdığımız anotasyonlar ile kurallarımızı oluşturuyoruz.

  • @NotEmpty ile boş geçilemez bir alan olduğunu belirtiyoruz ve içerisine hata oluştuğu sırada çıkacak mesajımızı yazıyoruz.
  • @Email ile bu değişkenin email validasyonu sağlıyoruz ve hata içeriğini

Üye Rest Controllerimizi oluşturacağız.

@PostMapping(value = "/uyeler")
public ResponseEntity<Uye> addUye (@RequestBody Uye uye)
{
    UyeDAO.addUye(uye);
    return new ResponseEntity<Uye>(uye, HttpStatus.OK);
}
 
@GetMapping(value = "/uyeler/{id}")
public ResponseEntity<Uye> getUyeById (@PathVariable("id") int id)
{
    Uye uye = UyeDAO.getUyeById(id);
     
    if(uye == null) {
         throw new RecordNotFoundException("Üye bulunamadı: " + id);
    }
    return new ResponseEntity<Uye>(uye, HttpStatus.OK);
}

Hata mesajlarımızı yönetebileceğimiz entitymizi yapalım. Bu entity bir mesaj ve detayları gösterebilmemizi sağlayacak.

@XmlRootElement(name = "error")
public class ErrorResponse
{
    public ErrorResponse(String message, List<String> details) {
        super();
        this.message = message;
        this.details = details;
    }
 
   
    private String message;
 
  
    private List<String> details;
 
}

Kayıt bulunamadığı zaman oluşacak olan hatayı ele alıyoruz.

@ResponseStatus(HttpStatus.NOT_FOUND)
public class RecordNotFoundException extends RuntimeException
{
    public RecordNotFoundException(String exception) {
        super(exception);
    }
}

Tüm hatalarımızın ele alacağımız classımızı yazalım. Bu class’da ResponseEntityExceptionHandler’i extend ederek Override ettiğimiz tüm hatalarımızı kontrol edebiliyoruz. Üstte yazdığımız kayıt bulanamadığı zaman oluşacak hatayı RecordNotFoundException‘ı handleUserNotFoundException’a bu class’ı belirterek ilgili değişkenlerimize ekleyebiliyoruz.

@SuppressWarnings({"unchecked","rawtypes"})
@ControllerAdvice
public class CustomExceptionHandler extends ResponseEntityExceptionHandler
{
    @ExceptionHandler(Exception.class)
    public final ResponseEntity<Object> handleAllExceptions(Exception ex, WebRequest request) {
        List<String> details = new ArrayList<>();
        details.add(ex.getLocalizedMessage());
        ErrorResponse error = new ErrorResponse("Server Error", details);
        return new ResponseEntity(error, HttpStatus.INTERNAL_SERVER_ERROR);
    }
 
    @ExceptionHandler(RecordNotFoundException.class)
    public final ResponseEntity<Object> handleUserNotFoundException(RecordNotFoundException ex, WebRequest request) {
        List<String> details = new ArrayList<>();
        details.add(ex.getLocalizedMessage());
        ErrorResponse error = new ErrorResponse("Üye Bulunamadı", details);
        return new ResponseEntity(error, HttpStatus.NOT_FOUND);
    }
 
    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
        List<String> details = new ArrayList<>();
        for(ObjectError error : ex.getBindingResult().getAllErrors()) {
            details.add(error.getDefaultMessage());
        }
        ErrorResponse error = new ErrorResponse("Validation Failed", details);
        return new ResponseEntity(error, HttpStatus.BAD_REQUEST);
    }
}

Bu şekilde isteklerden oluşacak hataları ele alıp istenilen işlem ve mesajları gösterebiliriz.


Önceki Ders: SSL İşlemleri , HTTPS Aktif Etmek
Spring Boot Dersleri
Sonraki Ders: Initial Data

Tags:

Exception Handling nedirspring boot applicationspring boot derslerispring boot uygulamaspring derslerispring Exception Handlingspring Exception Handling uygulama örneği

Paylaş

Diğer Yazılar

Spring Dersleri
Previous

Spring MVC Dersleri

blank
Next

Oracle Certified Associate, Professional Java 8 Sertifikası (OCAJP 8) Nedir?

Next
blank
14 Mart 2019

Oracle Certified Associate, Professional Java 8 Sertifikası (OCAJP 8) Nedir?

Previews
02 Mart 2019

Spring MVC Dersleri

Spring Dersleri

One Comment

  1. Ferhat Camgöz dedi ki:
    05 Ağustos 2020, 22:21

    Entity katmanına kural koymak tek sorumluluk prensibine aykırı olmaz mı?

    Cevapla

Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İlgini Çekebilir

Spring Boot Dersleri @ConditionalOnExpression Uygulama Ornegi

Spring Boot @ConditionalOnExpression Nedir? Uygulama Örneği

Spring Boot Dersleri Content Negotiation Uygulama Örneği

Spring Boot Content Negotiation XML – JSON Uygulama Örneği

Spring Boot Interceptor Nedir Kullanım Uygulama Örneği

Spring Boot Interceptor Nedir? Uygulama Örneği

Spring Data Redis Cache Kullanım Örneği

Spring Boot Data Redis Nedir? Distributed Cache Kullanımı

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

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

Link

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

Kategori

Cloud
Android
Struts
Java 21
Node.js
Spring Boot 3.0
Röportaj
Amazon Web Services
Vue.js
Gradle
Mikroservis Mimarisi
Redis
XCode
Debezium
Video
Spring Native
Spring Cloud Stream
Spring Security
MongoDB
PostgreSQL
JPA
iPhone Uygulama Geliştirme
Objective C
Git
Apache Kafka
Spring Data
Servlet
Yaptığım Projeler
Maven
Design Patterns
DevOps
Linux
Spring Jdbc Template
RabbitMQ
PrimeFaces
JDBC
Manset
Google
Spring
Spring MVC
Spring Cloud
OCA Java SE 8
Spring Core
Quarkus
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
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • RabbitMQ
  • Hibernate
  • Java Server Pages
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • Java 8
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale