Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Gson instead of Jackson in Spring Webflux

We have many Spring MVC projects already, which all use gson instead of jackson for response body encode. Our bean classes are all written based on gson annotation. Now I am setting up a Spring Webflux restful server. It would save a lot of work if we can use the old bean classes from our Spring MVC projects.

I have tried spring.http.converters.preferred-json-mapper=gson property to no avail.

I have tried HttpMessageConverter bean, which is included in webflux packages, but that does not work as in the Spring MVC projects.

I googled a lot and the only thing helpful is to implement org.springframework.http.codec.HttpMessageEncoder class and set it to WebFluxConfigurer.configureHttpMessageCodecs() method:

@Configuration
public class WebConfiguration implements WebFluxConfigurer {
    @Override
    public void configureHttpMessageCodecs(ServerCodecConfigurer configurer) {
        configurer.customCodecs().decoder(new GsonHttpMessageDecoder());
        configurer.customCodecs().encoder(new GsonHttpMessageEncoder());
    }

    private static class GsonHttpMessageEncoder implements HttpMessageEncoder {
        ...
    }

    private static class GsonHttpMessageDecoder implements HttpMessageDecoder {
        ...
    }
}

I haven't try this out yet, since it is a little complex. Is there some easy way to replace jackson with gson in Spring Webflux?

Any help is appreciated.

like image 996
Lyux Avatar asked Oct 15 '19 05:10

Lyux


People also ask

Does spring use Jackson or GSON?

Spring Boot uses Jackson by default as the serialization/deserialization framework for Json. But for me, I prefer Google's Gson, which is much more concise. This article will teach you how to use Gson instead of Jackson in your Spring Boot application.

Is Spring WebFlux better than Spring MVC?

Moreover, Spring WebFlux supports reactive backpressure, so we have more control over how we should react to fast producers than both Spring MVC Async and Spring MVC. Spring Flux also has a tangible shift towards functional coding style and declarative API decomposition thanks to Reactor API behind it.

Does spring WebFlux use Tomcat?

Spring WebFlux is supported on Tomcat, Jetty, Servlet 3.1+ containers, as well as on non-Servlet runtimes such as Netty and Undertow. Spring WebFlux is built on Project Reactor.

What is spring boot GSON?

GSON is a very popular Java library for work with JSON. JavaScript Object Notation (JSON) is a lightweight data exchange format. Like XML, JSON provides a way of representing object that is both human readable and machine processable.


1 Answers

Spring Framework doesn't support GSON as a WebFlux Encoder / Decoder for now. Feel free to follow up on the dedicated issue.

Note that as far as I know, GSON doesn't support non-blocking parsing so even if the support is implemented in Framework, it won't be complete and should not cover streaming input use cases.

like image 152
Brian Clozel Avatar answered Nov 15 '22 05:11

Brian Clozel