将Jersey实体记录为JSON作为响应

时间:2016-01-18 09:07:02

标签: java java-ee jersey

我是泽西新手,我需要记录JSON响应。我希望将实体转换为JSON,就像Jersey框架所做的那样(相同的映射器等)。有没有办法提取它的映射器(并调用,例如,它的writeValueAsString)?

1 个答案:

答案 0 :(得分:0)

您没有指定用于生成JSON响应的软件包(您没有详细说明您的泽西服务器),但我假设您使用Jackson

你在泽西岛有一些追踪,看看here,但我知道它并不能满足你的需要。

但首先你要实现LoggingFilter

public class YourLoggingFilter implements ContainerResponseFilter {

    @Override
    public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext)
            throws IOException {
        ...

    }

}

我假设你扩展了ResourceConfig类来添加资源,你需要在这里添加新的过滤器:

public class YourApplication extends ResourceConfig {

    public YourApplication() {
        super();

        register(YourAuthenticationRequestFilter.class, Priorities.AUTHENTICATION);
        register(YourExceptionMapper.class);
        register(YourLoggingFilter.class);

        packages("...");
    }
}

最后,在YourLoggingFilter内记录您的回复的简单方法是(这里我假设为Jackson,但这只是一个示例,我不知道您使用的是什么记录器,但是每次请求时都不要打开文件!!!)

Object obj = responseContext.getEntity();
ObjectMapper om = new ObjectMapper();
File file = new File("...");
try {
    OutputStream out = new FileOutputStream(file);
    om.writeValue(out, obj);
} catch (IOException e) {
    // this could fail but you don't want your request to fail
    e.printStackTrace();
}

希望它有所帮助。