我有兩個服務正在從IntelliJ 2017.1.2的兩個實例中進行調試。服務A向服務B提交一個json請求。這兩個服務都是使用REST調用的Spring-Boot。查看運行時的JSON響應/請求Intellij
服務A對職位:
ResponseEntity<InvoiceResponse> response =
restTemplate.postForEntity(invoiceUrl, request, InvoiceResponse.class);
服務B有一個端點:
@RequestMapping(value = "/office/{officeId}/invoice", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity createInvoice(@RequestBody InvoiceRequest invoiceRequest, @PathVariable("officeId") long officeId) {
...}
但我得到一個JWT過濾器,截取該請求,並處理它成功(我已經通過確認斷點):
public class JwtAuthenticationTokenFilter extends GenericFilterBean {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String authToken = httpRequest.getHeader(this.tokenHeader);
String username = jwtTokenUtil.getUsernameFromToken(authToken);
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
UserDetails userDetails = this.userDetailsService.loadUserByUsername(username);
if (jwtTokenUtil.validateToken(authToken, userDetails)) {
UsernamePasswordAuthenticationToken
authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(httpRequest));
SecurityContextHolder.getContext().setAuthentication(authentication);
}
}
chain.doFilter(request, response);
}
這似乎正常退出,因爲我沒有看到日誌中的任何錯誤。然而,在的IntelliJ服務A顯示消息:
無法讀取文件:無法識別的記號「缺失」:期待 (「真」,「假」或「空」)在[來源: 的Java。 [email protected];行:1,列:9] com.fasterxml.jackson.core.JsonParseException:無法識別的令牌 'Missing':在[Source: java.io上期待('true','false'或'null')。 PushbackInputStream @ 7d005eb;行:1,列:9]
我沒有任何堆棧跟蹤和步進通過代碼不顯示我的問題。我試圖找到一種方法來檢查JSON來/離開服務B,所以我可以看到正在使用,因爲這似乎是導致傑克遜問題。無論如何在IntelliJ中查看這個?如果我可以從服務A發送JSON,我可以重新創建Postman的調用,但我似乎無法跟蹤實際的JSON離開服務A。
如果它的事項,我使用的彈簧引導1.3.5和Java 8 OS X
UPDATE:
我增加了以下服務於每帕特里克灣建議:
@Bean
public CommonsRequestLoggingFilter requestLoggingFilter() {
CommonsRequestLoggingFilter loggingFilter = new CommonsRequestLoggingFilter();
loggingFilter.setIncludeClientInfo(true);
loggingFilter.setIncludeQueryString(true);
loggingFilter.setIncludePayload(true);
return loggingFilter;
}
但我還沒有看到任何JSON幫我看看有什麼問題我的要求:
DEBUG 74188 --- [nio-8081-exec-3] osweb.client.RestTemplate
:將[[email protected]]寫爲 「application/json; charset = UTF-8」使用 [org.springfr[email protected]610fefeb] DEBUG 74188 --- [NIO-8081-EXEC-3] osweb.client.RestTemplate
:爲 「http://localhost:8998/office/1/invoice」 POST請求導致 在200(null)DEBUG 74188 --- [nio-8081-exec-3] osweb.client.RestTemplate:Reading [class com..common.invoice.InvoiceResponse] as「application/json」using [org。 springfr[email protected]610fefeb] 錯誤74188 --- [nio-8081-exec-3] c.finance。連接器:無法讀取 文件:無法識別的記號「缺失」:期待(「真」, 「假」或「空」)
我也試過在我的服務B JwtAuthenticationTokenFilter檢查的HttpRequest。我嘗試過導航,但我沒有看到我發送的實際身體。我確實在請求中看到了正確的url,但一旦過濾器成功處理它,實際端點(「/ office/1/invoice」)永遠不會到達,因爲我認爲服務B爆炸了
你也應該能夠通過檢查HttpRequest的調試JwtAuthenticationTokenFilter當檢查請求主體。 –
也值得看看這個問題https://stackoverflow.com/questions/7952154/spring-resttemplate-how-to-enable-full-debugging-logging-of-requests-responses –
這實際上並沒有顯示我的JSON請求或響應。我需要看到,所以我可以看到我的傑克遜映射是不正確的。 – sonoerin