JBoss RESTful服务中的漂亮打印JSON输出

时间:2013-11-19 22:42:41

标签: java json rest jboss pretty-print

我遇到过“最佳做法”网站,提到你应该从RESTful网络服务中打印出你的JSON输出。我发现了很多关于如何打印JSON的资源,但是由于我让JBoss(和RESTEasy)输出我的JSON,我不知道有什么方法可以调整它的服务。

我的代码类似于:

@GET
@Path("books")
@Produces({ MediaType.APPLICATION_JSON })
public Book getBooks() {
    return doGetBooks();
}

JBoss处理请求并构建JSON就好了,但是它已经压缩了。我还没有找到任何方法告诉JBoss打印它,因此它在浏览器中更具人性化。我找到了一些关于如何从JBoss中提供非常好的打印XML的文档,而不是JSON。

谢谢你们!

1 个答案:

答案 0 :(得分:4)

我有一点关于解决方案,打印得相当不错。 (不是最好的漂亮印花,但它已经足够了)

你需要Maven的以下内容:

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>

然后你可以将你的方法改为:

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.ObjectWriter;

...

private final ObjectWriter WRITER = new ObjectMapper().writerWithDefaultPrettyPrinter();

...

@GET
@Path("books")
@Produces({ MediaType.APPLICATION_JSON })
public Response getBooks() {
    return Response.status(Status.OK).entity(WRITER.writeValueAsString(doGetBooks())).build();
}

因为它的作用是:

  1. 将对象转换为漂亮的JSON字符串
  2. 使用Response的{​​{1}}响应代码返回200个对象。
  3. 编辑:通过添加JSON String之类的查询参数来提供此功能可能是明智的,因为它会增加您的响应输出大小。

    您还可以看一下:http://docs.jboss.org/resteasy/2.0.0.GA/userguide/html/Built_in_JAXB_providers.html#decorators,它描述了创建一个XML装饰器,您可以调整它以使JSON仍然返回对象并在幕后制作它。 (我稍后会尝试摆弄这个)