2015-09-17 24 views
5

mã hiện tại của tôi:Thêm tiêu đề http tùy chỉnh của tôi để yêu cầu Xuân RestTemplate/mở rộng RestTemplate

RestTemplate restTemplate = new RestTemplate(); 
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 
Mall[] malls = restTemplate.getForObject(url, Mall[].class); 

tôi cần phải thêm một số tiêu đề tùy chỉnh cho yêu cầu của tôi, ở dạng:

X-TP-DeviceID : <GUID> 

là gì cách đơn giản nhất để làm điều đó trong trường hợp của tôi là gì? Có cách nào để thêm định nghĩa người mở tùy chỉnh cho đối tượng restTemplate của tôi trước khi tôi gửi yêu cầu đến máy chủ?

[sửa] Có đúng không?

RestTemplate restTemplate = new RestTemplate(); 
       restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 

       HttpHeaders headers = new HttpHeaders(); 
       headers.set("X-TP-DeviceID", "1234567890"); 
       HttpEntity entity = new HttpEntity(headers); 

       HttpEntity<Mall[]> response = restTemplate.exchange(url, HttpMethod.GET, entity, Mall[].class); 

       Mall[] malls = response.getBody(); 

[thêm] Vì vậy, tôi đã quản lý nó hoạt động. Tuy nhiên, tôi không hoàn toàn hài lòng với điều đó. Trong trường hợp của tôi, tôi sẽ cần phải cung cấp các tiêu đề tùy chỉnh tương tự cho tất cả các cuộc gọi tôi thực hiện.

Vì vậy, câu hỏi tiếp theo của tôi là - liệu có thể đặt tiêu đề tùy chỉnh của tôi được tự động thêm vào mỗi cuộc gọi web không? Ví dụ bằng cách mở rộng lớp RestTemplate và đặt tất cả các tiêu đề tùy chỉnh ở đó. Vì vậy, tất cả những gì tôi cần sau đó sẽ chỉ đơn giản là sử dụng RestTemplate mở rộng tùy chỉnh của tôi, thay vì một cổ phiếu và tất cả các tiêu đề tùy chỉnh của tôi sẽ có mặt ở đó theo mặc định.

Trả lời

9

Bạn có thể chuyển tiêu đề http tùy chỉnh bằng phương thức trao đổi RestTemplate như dưới đây.

HttpHeaders headers = new HttpHeaders(); 
headers.setAccept(Arrays.asList(new MediaType[] { MediaType.APPLICATION_JSON })); 
headers.setContentType(MediaType.APPLICATION_JSON); 
headers.set("X-TP-DeviceID", "your value"); 

HttpEntity<RestRequest> entityReq = new HttpEntity<RestRequest>(request, headers); 

RestTemplate template = new RestTemplate(); 

ResponseEntity<RestResponse> respEntity = template 
    .exchange("RestSvcUrl", HttpMethod.POST, entityReq, RestResponse.class); 

EDIT: Dưới đây là mã được cập nhật. This link has several ways of calling rest service with examples

RestTemplate restTemplate = new RestTemplate(); 

HttpHeaders headers = new HttpHeaders(); 
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON)); 
headers.setContentType(MediaType.APPLICATION_JSON); 
headers.set("X-TP-DeviceID", "your value"); 

HttpEntity<String> entity = new HttpEntity<String>("parameters", headers); 

ResponseEntity<Mall[]> respEntity = restTemplate.exchange(url, HttpMethod.POST, entity, Mall[].class); 

Mall[] resp = respEntity.getBody(); 
+0

Xin lỗi, vẫn chưa rõ đối với tôi. Bạn có thể cung cấp phiên bản sửa đổi mã của tôi không? Bạn có nghĩa là tôi sẽ có Mall [] thay vì RestRresponse? "Yêu cầu" là gì? Tôi có nên thêm đối tượng respEntity của bạn làm tham số để gọi getForObject không? Ngoài ra tôi cần phương pháp http nhận được trong trường hợp của tôi – user1209216

+0

Hãy thử với mã chỉnh sửa – kswaughs

+0

Thx, tôi cũng tìm thấy giải pháp hơi khác nhau, nó có đúng không? Tôi đã cập nhật câu hỏi của mình. Btw Tôi có thể sử dụng headers.add hoặc headers.set, sự khác nhau giữa chúng là gì? – user1209216

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