9 Aralık 2019 Pazartesi

SpringBoot MappingJackson2HttpMessageConverter Sınıfı

Giriş
Http + Json <--> Java arasında dönüşüm yapar.

Kullanım
SpringBoot bu sınıfı otomatik olarak yaratır. Bazen kendimizin elle bazı ayarlar yapması gerekir.

Örnek
Şöyle yaparız.
@Configuration
@EnableWebMvc
public class Conf extends WebMvcConfigurerApdapter {

  @Override
  public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    MappingJackson2HttpMessageConverter obj = new MappingJackson2HttpMessageConverter();
    ...
    converters.add(obj);
  }
}
constructor
Şöyle yaparız.
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {

  MappingJackson2HttpMessageConverter messageConverter = 
    new MappingJackson2HttpMessageConverter();
  ...
  return messageConverter;
}
registerModule metodu
Şöyle yaparız
mapper.registerModule(new GuavaModule());
setDefaultCharset metodu
Şöyle yaparız.
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
  MappingJackson2HttpMessageConverter jsonConverter = new 
    MappingJackson2HttpMessageConverter();
  ObjectMapper objectMapper = new ObjectMapper();
  objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
  jsonConverter.setObjectMapper(objectMapper);
  jsonConverter.setDefaultCharset(null);
  return jsonConverter;
}
setSupportedMediaTypes metodu
Örnek
Şöyle yaparız.
converter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_HTML));
Örnek
Şöyle yaparız. Burada MappingJackson2HttpMessageConverter kullanılarak MULTIPART_FORM_DATA verisi JSON olarak gönderiliyor
RestTemplate restTemplate = new RestTemplate();

MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(MediaType.MULTIPART_FORM_DATA);
restTemplate.getMessageConverters().add(converter);
setObjectMapper metodu

Açıklaması şöyle.
A MappingJackson2HttpMessageConverter uses Jackson to map POJOs to JSON and vice versa. When the MappingJackson2HttpMessageConverter is created it's given a new instance of ObjectMapper. A default instance of ObjectMapper is fine is many cases, but there are times when you might want to customize the ObjectMapper used.
Örnek
Şöyle yaparız.
ObjectMapper objectMapper = ...;
...
messageConverter.setObjectMapper(objectMapper);
Örnek
Şöyle yaparız.
@Configuration
public class WebConfig extends WebMvcConfigurationSupport {

  @Bean
  public MappingJackson2HttpMessageConverter customJackson2HttpMessageConverter() {
    MappingJackson2HttpMessageConverter jsonConverter = 
       new MappingJackson2HttpMessageConverter();

    ObjectMapper objectMapper = new ObjectMapper(); 

    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);

    jsonConverter.setObjectMapper(objectMapper);
    return jsonConverter;
  }

  @Override
  public void configureMessageConverters(List<HttpMessageConverter<?>> 
                                       converters) {
    converters.add(customJackson2HttpMessageConverter());
    super.addDefaultHttpMessageConverters();
  }
} 

Hiç yorum yok:

Yorum Gönder