2

我在 Spring MVC 应用程序中使用 Jackson 1.9.6 (codehaus) 对我的响应主体进行 JSON 序列化,但我无法找到配置漂亮打印的方法。我能找到的所有代码示例(如thisthis)都涉及使用ObjectMapperor的实例化ObjectWriter,但我目前没有将这些实例化用于其他任何事情。我什至不知道把这段代码放在哪里。我的所有 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;
}
4

2 回答 2

5

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

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

在我看来,它是最干净的可用解决方案并且效果很好。

于 2015-09-07T05:18:43.587 回答
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()));
}
于 2015-09-07T05:21:28.543 回答