Arşivler

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

Spring Boot Dersleri Content Negotiation Uygulama Örneği
Spring Boot Dersleri Content Negotiation Uygulama Örneği

Spring Boot Dersleri‘ne devam ediyorum.

Bu yazıda Spring Boot Content Negotiation ne olduğu açıklayacağım ve bir uygulama örneği yapacağım.

Content Negotiation Nedir?

Spring Boot uygulamamız, HTTP isteği için belirlediğimiz veri formatını belirleyebilme özelliğine sahiptir. İstemciden gelen verinin belli bir formatta olduğunu varsayarak uygulamamızı yapılandırabiliriz. Birden fazla istemciden farklı veri formatlarını desteklemek için aynı API’yi kullanabiliriz. Bu sayede yazılımımız, JSON ve XML formatlarında verileri aynı endpointte işleyebilir.

Spring Boot uygulamamızda yapacağımız konfigürasyon yapılandırması ile istemciden gelecek tipe göre veriyi işleyebileceğiz

Uygulama Örneği

Basit bir rest api uygulaması yapalım.

Bir Employee sınıfı olşuturalım.

public class Employee {
    private String id ;
    private String name;
    private String lastName;
    private String email;
    private String departmentId;
}
Code language: PHP (php)

Şimdi controllerimizi oluşturulım ve bu sınıftan gelen adı string olarak geri döndürelim.

@RestController
public class MessageController {

  @PostMapping("/employess)
  public String save(@RequestBody Employee employee){
      return   employee.getName;
    }
}
Code language: Java (java)

Eğer istek xml formatında gelecek ise verileri kolay bir şekilde maplemek için aşağıdaki kütüphaneyi eklememiz gerekmektedir.

<dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-xml</artifactId>
</dependency>Code language: HTML, XML (xml)

Uygulamamıza gelen requestin Json ya da Xml olması için bir WebConfig sınıfı oluşturacağız ve isteklerin bu formatta kabul edilmesini sağlayacağız.

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.favorParameter(true)
                .parameterName("mediaType")
                .defaultContentType(MediaType.APPLICATION_JSON)
                .mediaType("xml", MediaType.APPLICATION_XML)
                .mediaType("json", MediaType.APPLICATION_JSON);
    }
}
Code language: Java (java)

WebMvcConfigurer sınıfını implement ederek configureContentNegotiation sınıfı içerisinde neler yaptık bakalım.

  • defaultContentType: Eğer özellikle bir tip belirtilmedi ise kabul edeceğimiz format json formatı olacaktır.
  • mediaType: Gelen istek içerisinde mediaType parametresi xml ya da json belirtildiğinde kabul ettiğimiz formatları da tanımlamış olmaktayız.

XML formatında bir istek oluşturalım.

blank

Cevap olarak ise Burak çıktısını verecektir. Eğer bir mediaType belirtmezsek json olarak göndermemiz gerekmektedir. mediaType tanımı json olursa da yine json formatı kabul etmemiz gerekmektedir.


Önceki Ders: Spring Boot Interceptor Nedir
Spring Boot Dersleri
Sonraki Ders: Spring Boot @ConditionalOnExpression