50 votes

Lorsque vous utilisez Spring MVC pour REST, comment permettez-vous à Jackson d'imprimer joliment le rendu JSON ?

Lors du développement de services REST à l'aide de Spring MVC, j'aimerais rendre JSON "assez imprimé" en développement mais normal (espaces blancs réduits) en production.

24voto

Swato Points 513

Lorsque vous utilisez Jackson 2.0.0, vous pouvez le faire d'une manière que Les voulait. J'utilise actuellement RC3 et la configuration semble fonctionner comme prévu.

 ObjectMapper jacksonMapper = new ObjectMapper();
jacksonMapper.configure(SerializationFeature.INDENT_OUTPUT, true);

traduit

 {"foo":"foo","bar":{"field1":"field1","field2":"field2"}}

dans

 {
  "foo" : "foo",
  "bar" : {
    "field1" : "field1",
    "field2" : "field2"
  }
}

23voto

MattJ Points 61

Puis-je suggérer cette approche, elle est valable avec Spring 4.0.x et peut-être avec des versions plus anciennes.

 import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
@EnableWebMvc    
public class WebMvcConfig extends WebMvcConfigurerAdapter {


    @Bean
    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
        mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper());
        return mappingJackson2HttpMessageConverter;
    }

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objMapper = new ObjectMapper();
        objMapper.enable(SerializationFeature.INDENT_OUTPUT);
        return objMapper;
    }

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

}

Merci à Willie Wheeler pour la solution : le blog Spring de Willie Wheeler

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X