我使用Jackson 1.9.6(codehaus)在Spring MVC应用程序中对我的响应主体进行JSON序列化,而且我无法找到配置漂亮打印的方法。我能够找到的所有代码示例(例如this和this)都涉及使用ObjectMapper
或ObjectWriter
的实例化,但我不会# 39; t目前使用这些实例化来做其他任何事情。我甚至不知道在哪里放这个代码。我所有的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;
}
答案 0 :(得分:5)
我搜索并搜索了类似的东西,我能找到的最接近的是将这个bean添加到我的应用程序上下文配置中(注意:我使用的是Spring Boot,所以我不是100%肯定这将在非Spring Boot app):
@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder()
{
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.indentOutput(true);
return builder;
}
在我看来,它是最干净的解决方案并且效果很好。
答案 1 :(得分: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()));
}