2010-10-08 21 views
12

Tôi đang sử dụng RestTemplate để thực hiện cuộc gọi đến một dịch vụ web.Làm cách nào để đăng nhập phản hồi trong Spring RestTemplate?

String userId = restTemplate.getForObject(createUserUrl, String.class); 

Nếu điều này không trả lại ID người dùng, tôi chỉ được trả lại vô giá trị nhưng tôi không biết tại sao. Làm cách nào để xuất đáp ứng XML thực tế vào nhật ký?

+0

Phản hồi XML nào? – skaffman

+0

Bạn cũng có thể sử dụng LoggingRequestInterceptor cf http://stackoverflow.com/a/22620168/409784 – Francois

+0

Resolved https://stackoverflow.com/questions/7952154/spring-resttemplate-how-to-enable-full- debugging-logging-of-requests-response/47467572 – user2746033

Trả lời

11

Tùy thuộc vào phương pháp tạo kết nối HTTP bạn đang sử dụng, bạn có thể nhìn vào chuyển hướng mạnh vào khai thác gỗ trong các lớp kết nối HTTP thực tế.

Ví dụ, nếu bạn đang sử dụng commons HttpClient, bạn có thể đặt

log4j.logger.httpclient.wire=DEBUG 

Các commons-httpclient dự án có an entire page in the documentation on their logging practices.

+1

Tôi không biết mình đang sử dụng phương pháp nào, tất cả đều nằm dưới mui xe của RestTemplate. Sử dụng log4j.logger.httpclient.wire dường như không làm gì cả. – rjsang

+0

Tôi đề nghị trước tiên hãy đăng nhập để TẤT CẢ mùa xuân để hiểu những gì đang diễn ra dưới sự che chở của RestTemplate, điều này có thể cung cấp cho bạn một ý tưởng về vị trí tiếp theo. –

+0

Xin lỗi, đây là cũ nhưng tôi quên đánh dấu vào đây là câu trả lời đúng! – rjsang

9

Cấu hình đăng nhập của bạn như sau:

log4j.logger.org.springframework.web.client=DEBUG 

Sau đó sử dụng một lệnh curl để xem kết quả, ví dụ như

curl -H 'Accept: application/xml' -H 'Content-Type: application/xml' http://localhost:8080/ser/data 

Theo mặc định, restTemplate sử dụng HttpURlConnection (thông qua SimpleClientHttpRequest), do đó bạn có thể cần để chuyển sang jakarta httpclient để xem báo cáo nhật ký. Nếu không cấu hình đăng nhập trên sẽ ra cho bạn thấy những phản ứng

<bean id="httpClientFactory" class="org.springframework.http.client.CommonsClientHttpRequestFactory"> 
     <constructor-arg><bean class="org.apache.commons.httpclient.HttpClient"/></constructor-arg> 
    </bean> 
    <bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> 
     <constructor-arg ref="httpClientFactory"/> 
     <property name="messageConverters"> 
... 
+3

Cài đặt log4j đó ghi lại các yêu cầu nhưng không ghi lại các câu trả lời. Tôi không thể sử dụng curl vì nó là môi trường Windows, cộng với tôi đang tìm kiếm thứ gì đó mà tôi có thể cam kết như một phần của codebase để ghi nhật kí được bật cho các bài kiểm tra tích hợp của chúng tôi – rjsang

+0

Có các phiên bản Windows curl và các phiên bản Cygwin : http://curl.haxx.se/download.html#Win32 –

0

Bạn có thể sử dụng spring-rest-template-logger để đăng nhập RestTemplate Lưu lượng truy cập HTTP.

Thêm một phụ thuộc vào dự án Maven của bạn:

<dependency> 
    <groupId>org.hobsoft.spring</groupId> 
    <artifactId>rest-template-logger</artifactId> 
    <version>0.1.0</version> 
</dependency> 

Sau đó tùy chỉnh của bạn RestTemplate như sau:

RestTemplate restTemplate = new RestTemplateBuilder() 
    .customizers(new LoggingCustomizer()) 
    .build() 

Bây giờ tất cả RestTemplate HTTP giao thông sẽ được đăng nhập để org.hobsoft.spring.resttemplatelogger.LoggingCustomizer ở mức debug.

KHUYẾN CÁO: Tôi đã viết thư viện này.

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi.- [Từ đánh giá] (/ review/low-quality-posts/17802986) –

+0

@ Al-Mothafar Cảm ơn, tôi đã bao gồm các thông tin liên quan ở đây. –

Các vấn đề liên quan