如何在 Jersey Trace 中打印漂亮的 JSON?

How to print pretty JSON in Jersey Trace?

我有一个带有 Jersey 的 REST API,请求跟踪是这样的:

Información: 5 * Server out-bound response
5 < 200
5 < Content-Type: application/json
5 < X-Jersey-Trace-000: accept root resource classes: "/vales"
5 < X-Jersey-Trace-001: match path "/vales" -> "/application\.wadl(/.*)?", "/selacservicios(/.*)?", "/proveedores(/.*)?", "/vehiculos(/.*)?", "/empresas(/.*)?", "/vales(/.*)?", "/ok(/.*)?"
5 < X-Jersey-Trace-002: accept right hand path java.util.regex.Matcher[pattern=/vales(/.*)? region=0,6 lastmatch=/vales]: "/vales" -> "/vales" : ""
5 < X-Jersey-Trace-003: accept resource: "vales" -> @Path("/vales") com.grupogimeno.senda.siccagest.services.rest.ValeCompraResource@3f494991
5 < X-Jersey-Trace-004: match path "" -> ""
5 < X-Jersey-Trace-005: accept resource methods: "vales", GET -> com.grupogimeno.senda.siccagest.services.rest.ValeCompraResource@3f494991
5 < X-Jersey-Trace-006: matched resource method: public java.util.Map com.grupogimeno.senda.siccagest.services.rest.ValeCompraResource.getValesCompraDeUsuario(java.lang.String,java.lang.Integer)
5 < X-Jersey-Trace-007: matched message body writer: java.util.LinkedHashMap@b690aa46, "application/json" -> com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider@12b315ef
5 < 
{"success":true,"data":[{"fGeneracion":1428579118957,"numValeCompra":"001562","abreviaturaEmpresa":"AGU. NUMANCIA","nombreProveedor":"MAJIMSA VALENCIA, S.A."},{"fGeneracion":1428579081230,"numValeCompra":"005647","abreviaturaEmpresa":"A.VINAROS-UTE","nombreProveedor":"EXCAV BABILONI, S.A."},{"fGeneracion":1428579081230,"numValeCompra":"005647","abreviaturaEmpresa":"A.VINAROS-UTE","nombreProveedor":"EXCAV BABILONI, S.A."}]}

有没有办法更漂亮地打印 JSON 响应?像这样:

{
    "success": true,
    "data": [
        {
            "fGeneracion": 1428579118957,
            "numValeCompra": "001562",
            "abreviaturaEmpresa": "AGU. NUMANCIA",
            "nombreProveedor": "MAJIMSA VALENCIA, S.A."
        },
        {
            "fGeneracion": 1428579081230,
            "numValeCompra": "005647",
            "abreviaturaEmpresa": "A.VINAROS-UTE",
            "nombreProveedor": "EXCAV BABILONI, S.A."
        },
        {
            "fGeneracion": 1428579081230,
            "numValeCompra": "005647",
            "abreviaturaEmpresa": "A.VINAROS-UTE",
            "nombreProveedor": "EXCAV BABILONI, S.A."
        }
    ]
}

这是 web.xml 中的过滤器:

<init-param>
    <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
    <param-value>com.sun.jersey.api.container.filter.LoggingFilter</param-value>
</init-param>

谢谢。

使用com.google.gson.Gson-

代码将是 -

Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(JsonObject); 
LOGGER.info("JSON prettier response: "+json);

您可以将 ObjectMapper 配置为 configure(SerializationFeature.INDENT_OUTPUT, true);。您可以在 ContextResolver 中将其配置为 seen here.

请注意,这将格式化实际响应,而不仅仅是日志记录。日志记录似乎只打印响应 "as-is",所以我不知道你怎么会有一个没有另一个(除非编写你自己的记录器)