首页 文章

我可以从注释或Spring MVC控制器配置Jackson JSON漂亮的打印吗?

提问于
浏览
2

我在找到配置漂亮打印的方法时遇到了麻烦 . 我能够找到的所有代码示例(如thisthis)都涉及使用 ObjectMapperObjectWriter 的实例化,但我甚至不知道放置此代码的位置 . 我所有的Jackson配置都是通过注释序列化为JSON的POJO来处理的 .

有没有办法在注释中指定漂亮的打印?我认为他们会把它放在@JsonSerialize中,但它看起来不像 .

我要序列化的类看起来像这样:

@JsonAutoDetect
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
public class JSONObject implements Serializable{...}

我的Spring控制器方法如下所示:

@RequestMapping(method = RequestMethod.GET)
public @ResponseBody List<Object> getMessagesAndUpdates(HttpServletRequest request, HttpServletResponse response) {
    JSONObject jsonResponse = new JSONObject();
    .
    .
    .
    //this will generate a non-pretty-printed json response.  I want it to be pretty-printed.
    return jsonResponse;
}

2 回答

  • 5

    我搜索并搜索了类似的东西,我能找到的最接近的是将这个bean添加到我的应用程序上下文配置中(注意:我使用的是Spring Boot,所以我不是100%肯定这将在非Spring Boot应用程序中按原样运行):

    @Bean
    public Jackson2ObjectMapperBuilder jacksonBuilder()
    {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        builder.indentOutput(true);
        return builder;
    }
    

    在我看来,它是最干净的解决方案,效果很好 .

  • 1

    将其添加为单独的答案,以便我可以格式化输出 .

    幸运的是,非Spring Boot解决方案离Spring Boot解决方案并不太远:)

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        builder.indentOutput(true).dateFormat(new SimpleDateFormat("yyyy-MM-dd"));
        converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
        converters.add(new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build()));
    }
    

相关问题