public class RequestResponseLoggingInterceptor implements ClientHttpRequestInterceptor{
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
throws IOException {
logRequest(request, body );
ClientHttpResponse response = execution.execute(request, body);
return response;
}
private void logRequest(HttpRequest request, byte[] body) {
try {
String jsonSting=new String(body, "UTF-8");
System.out.println("*****"+jsonSting);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
Я пытаюсь перехватить запрос API отдыха, используя пользовательский перехватчик. В приведенном выше коде я не могу получить полное тело запроса. Тело запроса, как показано ниже -
{
"header" : {
"functionRequesterIdentifier" : "1.3.6.1.4.1.11791.104.85.1",
"functionCallIdentifier" : "1234567890"
},
"eid" : "89049032000001000000002193978472",
"iccid" : "8944500803162021501",
"smsr-id" : "65.105.114.79.110.118.51",
"mno-id" : "1.3.6.1.4.1.11791.104.85.1",
"smdp-id" : "1.2.3.4.5",
"callbackUrl" : "http://PUN1DT11239:8081/mock/audit"
}
В операторе System.out.println печатается только
{"username":"shreyas","password":"Happy2020","client-ip":"127.0.0.1","stateless":true}
Полагаю, новая строка (тело, "UTF-8"); мог получить полные части тела, но это не так.
Как получить полное Json тело из запроса и перехватчика?
Обновление - шаблон RestTemplate создается, как показано ниже -
ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory());
RestTemplate restTemplate = new RestTemplate(factory);
restTemplate.setRequestFactory(requestFactory);
List<ClientHttpRequestInterceptor> interceptors = restTemplate.getInterceptors();
if(null == interceptors){
interceptors = new ArrayList<>();
}
addInterceptorToChain(interceptors);