How to use alternative JSON lib from Spring MVC

1.1k views Asked by At

My understanding is that Spring MVC ships with a version/dependency of the Jackson JSON library. I really like/prefer FlexJSON and was wondering if it is possible to configure Spring to use FlexJSON instead, and if so, how?

1

There are 1 answers

0
Sotirios Delimanolis On BEST ANSWER

Spring uses the HttpMessageConverter to generate a response when you annotate your handle method with @ResponseBody or when you return a ResponseEntity object.

When Spring sets up your MVC configuration, it registers a number of HttpMessageConverter implementations, among which is the Jackson implementation, MappingJackson2HttpMessageConverter. It does this in the WebMvcConfigurationSupport class (Spring MVC 3.1+)

@SuppressWarnings("deprecation")
protected final void addDefaultHttpMessageConverters(List<HttpMessageConverter<?>> messageConverters) {
    StringHttpMessageConverter stringConverter = new StringHttpMessageConverter();
    stringConverter.setWriteAcceptCharset(false);

    messageConverters.add(new ByteArrayHttpMessageConverter());
    messageConverters.add(stringConverter);
    messageConverters.add(new ResourceHttpMessageConverter());
    messageConverters.add(new SourceHttpMessageConverter<Source>());
    messageConverters.add(new AllEncompassingFormHttpMessageConverter());
    if (romePresent) {
        messageConverters.add(new AtomFeedHttpMessageConverter());
        messageConverters.add(new RssChannelHttpMessageConverter());
    }
    if (jaxb2Present) {
        messageConverters.add(new Jaxb2RootElementHttpMessageConverter());
    }
    if (jackson2Present) {
        messageConverters.add(new MappingJackson2HttpMessageConverter());
    }
    else if (jacksonPresent) {
        messageConverters.add(new org.springframework.http.converter.json.MappingJacksonHttpMessageConverter());
    }
}

These are registered as defaults. Before doing this, Spring registers any custom HttpMessageConverter bean or instances you might want.

So the solution is to implement your own with flexjson and register it. Registering depends on what kind of configuration you are doing, but there are resources out there for each.