如何从以下代码打印/记录JSON的请求主体@ Rest WS with Jersey in Java。我可以记录响应。我正在努力记录/打印确切的请求正文。
提前致谢。
WebTarget target = client.target(url);
//authentication strings
String authString = "username:password";
byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
String authStringEnc = new String(authEncBytes);
Response res = target.request(MediaType.APPLICATION_JSON)
.header("content-type", "application/json")
.header("Authorization", "Basic " + authStringEnc)
.header("accept", "application/json,text/plain")
.header("X-senderTimestamp", new Timestamp(System.currentTimeMillis()))
.header("X-appCode", "IVR")
.header("X-sessionId", XsessionId)
.post(Entity.entity(getAccountInfoInputBean, MediaType.APPLICATION_JSON));
答案 0 :(得分:2)
在Jersey 2.23及更高版本中,LoggingFeature
将为您提供帮助。必须注册如下:
ClientConfig clientConfig = new ClientConfig();
clientConfig.property(LoggingFeature.LOGGING_FEATURE_VERBOSITY_CLIENT,
LoggingFeature.Verbosity.PAYLOAD_ANY);
Client client = ClientBuilder.newBuilder(clientConfig);
使用默认详细程度设置(LoggingFeature.Verbosity.PAYLOAD_TEXT
),将记录请求和响应标头,以及实体(如果认为是可读文本)。如果媒体类型为text/*
或是以下之一,则该实体被视为可读文本:
application/atom+xml
application/json
application/svg+xml
application/x-www-form-urlencoded
application/xhtml+xml
application/xml
请注意,实体已记录到指定的最大字节数(请参阅LoggingFeature.LOGGING_FEATURE_MAX_ENTITY_SIZE
)。
有关详细信息,请查看Jersey documentation about logging。
在旧版本中,请使用LoggingFilter
。根据文档,从Jersey 2.23及更高版本开始,此过滤器已被弃用,将很快删除。
答案 1 :(得分:0)
您可以使用LoggingFilter登录System.out。
client.addFilter(new LoggingFilter(System.out));
WebTarget target = client.target(url);