我遇到过“最佳做法”网站,提到你应该从RESTful网络服务中打印出你的JSON输出。我发现了很多关于如何打印JSON的资源,但是由于我让JBoss(和RESTEasy)输出我的JSON,我不知道有什么方法可以调整它的服务。
我的代码类似于:
@GET
@Path("books")
@Produces({ MediaType.APPLICATION_JSON })
public Book getBooks() {
return doGetBooks();
}
JBoss处理请求并构建JSON就好了,但是它已经压缩了。我还没有找到任何方法告诉JBoss打印它,因此它在浏览器中更具人性化。我找到了一些关于如何从JBoss中提供非常好的打印XML的文档,而不是JSON。
谢谢你们!
答案 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();
}
因为它的作用是:
Response
的{{1}}响应代码返回200
个对象。编辑:通过添加JSON String
之类的查询参数来提供此功能可能是明智的,因为它会增加您的响应输出大小。
您还可以看一下:http://docs.jboss.org/resteasy/2.0.0.GA/userguide/html/Built_in_JAXB_providers.html#decorators,它描述了创建一个XML装饰器,您可以调整它以使JSON仍然返回对象并在幕后制作它。 (我稍后会尝试摆弄这个)