2012-09-07 32 views
5

KHUYẾN CÁO: Tôi đã tìm kiếm đầy đủ để có câu trả lời cho câu hỏi này, và có, tôi đã tìm thấy câu hỏi khác này: https://stackoverflow.com/questions/10315728/how-to-send-parameters-as-formparam-to-webservice. Nhưng trước hết, câu hỏi đó là hỏi về Javascript, trong khi tôi hỏi về Java, và thứ hai, nó vẫn chưa có câu trả lời. Vì vậy, đối với câu hỏi ...Làm cách nào để chuyển @FormParam sang dịch vụ RESTful từ một phương thức khác?

Với dịch vụ RESTful, hãy chuyển @QueryParam vào dịch vụ @GET khá dễ dàng, vì bạn có thể chỉ cần thêm các cặp tên/giá trị vào URL và sử dụng nó để truy cập máy chủ từ bên trong chương trình. Có cách nào để làm điều này với @FormParam s không?

Ví dụ, giả sử tôi có dịch vụ RESTful sau:

@POST 
@Produces("application/xml") 
@Path("/processInfo") 
public String processInfo(@FormParam("userId") String userId, 
          @FormParam("deviceId") String deviceId, 
          @FormParam("comments") String comments) { 
    /* 
    * Process stuff and return 
    */ 
} 

... và chúng ta hãy nói rằng tôi cũng có phương pháp khác ở một nơi khác trong chương trình của tôi như thế này:

public void updateValues(String comments) { 

    String userId = getUserId(); 
    String deviceId = getDeviceId(); 

    /* 
    * Send the information to the /processInfo service 
    */ 

} 

thế nào tôi có thể thực hiện hành động nhận xét trong phương pháp thứ hai không?

LƯU Ý: Giả sử các phương pháp này không nằm trong cùng một lớp hoặc gói. Cũng giả sử rằng dịch vụ RESTful được lưu trữ trên máy chủ khác nhau so với máy bạn đang chạy phương pháp của mình. Như vậy, bạn phải truy cập phương thức và chuyển các giá trị theo cách RESTful.

Cảm ơn sự giúp đỡ của bạn!

Trả lời

6

Sử dụng @FormParam bạn có thể ràng buộc các tham số biểu mẫu thành một biến.Bạn có thể tìm mẫu here.

Thứ hai, Để gọi dịch vụ nghỉ ngơi nội bộ, hãy tạo mã phương thức java của bạn, bạn sẽ phải sử dụng ứng dụng khách của khách hàng áo. Mã mẫu có thể được tìm thấy here.

Bạn có thể chuyển các tham số biểu mẫu bằng cách sử dụng biểu mẫu ứng dụng khách như sau.

Tạo hình thức

ClientConfig config = new DefaultClientConfig(); 
Client client = Client.create(config); 
WebResource service = client.resource(UriBuilder.fromUri("http://localhost:8080/api").build()); 

Form f = new Form();  
f.add("userId", "foo");  
f.add("deviceId", "bar");  
f.add("comments", "Device"); 

vượt qua nó để phương pháp yên tĩnh.

service.path("processInfo").accept(MediaType.APPLICATION_XML).post(String.class,f); 

reference

+1

Bạn có thể vượt qua các tham số hình thức như thế này, sử dụng com.sun.jersey.api.representation.Form như sau. Form f = new Form(); f.add ("userId", "foo"); f.add ("deviceId", "bar"); f.add ("nhận xét", "Thiết bị"); // Giao diện thông thạo service.path ("processInfo"). Chấp nhận (MediaType.APPLICATION_XML) .post (String.class, f); –

+0

Thật tuyệt vời! Bạn có thể thêm điều đó vào câu trả lời của bạn và giải thích dòng cuối cùng nhiều hơn một chút không? Điều này: 'service.path (" processInfo "). Chấp nhận (MediaType.APPLICATION_XML) .post (String.class, ‌ f)' Sau đó, tôi sẽ chấp nhận. :) – asteri

+1

Cụ thể, đối tượng 'service' mà bạn đang gọi' path() 'là gì? – asteri

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