我是泽西新手,我需要记录JSON响应。我希望将实体转换为JSON,就像Jersey框架所做的那样(相同的映射器等)。有没有办法提取它的映射器(并调用,例如,它的writeValueAsString)?
答案 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();
}
希望它有所帮助。