4月春季Jackson PrettyPrint

时间:2016-01-21 12:00:38

标签: java json spring jackson

目标是通过PrettyPrint使控制器的Jackson格式响应。 多数民众赞成我的配置:

@EnableWebMvc
@Configuration
public class JacksonConfig extends WebMvcConfigurerAdapter {
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        for (HttpMessageConverter<?> converter : converters) {
            if (converter instanceof MappingJackson2HttpMessageConverter) {
                MappingJackson2HttpMessageConverter jsonMessageConverter = (MappingJackson2HttpMessageConverter) converter;
                ObjectMapper objectMapper = jsonMessageConverter.getObjectMapper();
                objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
                objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
            }
        }
    }
} 

这就是控制器的样子:

@RequestMapping(value = "/facebook", method = RequestMethod.POST, produces = "application/json")
public @ResponseBody Map<String, Object> authorizeViaFacebook(
        @RequestParam(value = "token") String token) throws DefaultException{

    Facebook facebook = this.facebookUtility.getFacebook(token);
    org.springframework.social.facebook.api.User facebookUserProfile = facebook.userOperations().getUserProfile("me");

    User loggedInUser = User.signInWithFacebookProfile(facebookUserProfile);

    return ImmutableMap.of("token", loggedInUser.tokenForAuthentication(), "user", loggedInUser);
}

但无论我做什么,它仍然可以直接打印出来。我尝试了不同的配置,但仍然没有成功。

这是杰克逊的POM文件:

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.6.0</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.6.0</version>
    </dependency>

Spring版本是4.2.4.RELEASE。

如何让杰克逊使用PrettyPrint格式?

3 个答案:

答案 0 :(得分:3)

在尝试在Roo生成的项目中配置Jackson的对象映射器时,我遇到过类似的问题。您需要将这些代码段放入webmvc-config,以使用您的自定义代码替换默认的objectmapper:

$route['default_controller'] = 'customer/comingsoon';

希望它有所帮助。为了能够使用基于代码的配置配置Jackson,您需要设置WebApplicationInitializer 您可以通过以下链接找到更多信息:http://docs.spring.io/spring/docs/4.2.x/javadoc-api/org/springframework/web/WebApplicationInitializer.html

答案 1 :(得分:1)

要添加@Jenky答案,下面是如何使用代码方法配置Jackson的映射器以进行漂亮打印的示例。我在这个例子中使用spring-boot-starter-1.3.3.RELEASE。只需在类路径上安装此类,Spring Boot就会自动将其启动。

@Configuration
public class CustomWebMvcConfiguration extends WebMvcConfigurationSupport {

    @Override
    protected void extendMessageConverters( List<HttpMessageConverter<?>> converters ) {

        for ( HttpMessageConverter<?> converter : converters ) {

            if ( converter instanceof MappingJackson2HttpMessageConverter ) {

                MappingJackson2HttpMessageConverter jacksonConverter = (MappingJackson2HttpMessageConverter) converter;

                jacksonConverter.setPrettyPrint( true );

            }

        }

    }

}

答案 2 :(得分:1)

spring-boot允许通过.properties文件中的spring.jackson.*属性进行杰克逊配置。

spring.jackson.serialization.indent-output=true

我们还可以在{@ 1}中@Autowire对此ObjectMapper进行配置。如果不需要全局配置,则objectMapper.writerWithDefaultPrettyPrinter()会启用默认缩进。

已通过使用jackson-databind-2.6.5.jar的spring-boot 1.5.8.RELEASE测试。