2014-01-06 1 views
4

Я использую Apache CXF WebClient потреблять услугу, написанный на .NETКак отправить данные JSON в тело запроса sument apache CXF webclient?

образец JSON для передачи в теле запроса к веб-службе

{ 
    "Conditions": 
     [ 
     { 
      "Field":"TextBody", 
      "Comparer":"ContainsAny", 
      "Values":["stocks","retire"], 
      "Proximity":0 
     }, 
     { 
      "Field":"SentAt", 
      "Comparer":"LessThan", 
      "Values":["1331769600"], 
      "Proximity":0 
     }, 
     ], 
    "Operator":"And", 
    "ExpireResultIn":3600 
} 

Есть ли способ, если я хочу, чтобы представить данные как в форме, так и в корпусе Json по одному запросу? WebClient API Apache CXF -

web client API doc

WebClient client = WebClient.create("http://mylocalhost.com:8989/CXFTest/cxfws/rest/restservice/json"); 
client.type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON); 

После этого, какой метод и как использовать?

client.form(...form object) 

client.post(...JSON string) 

Они не поделили Объект «Условие» в формате JSON, который я могу аннотировать и передать на сообщение метода клиента

ответ

3

Я получил ответ здесь нужно установить поставщик JSON в моем случае это был джексон

List<Object> providers = new ArrayList<Object>(); 
providers.add(new JacksonJaxbJsonProvider()); 

WebClient client = WebClient.create("http://localhost:8080/poc_restapi_cxf/api", 
            providers); 
client = client.accept("application/json") 
       .type("application/json") 
       .path("/order") 
       .query("id", "1"); 

Order order = client.get(Order.class); 
System.out.println("Order:" + order.getCustomerName()); 
0

Существует способ сделать это с помощью аннотаций и подходит моей цели:

@Post 
@Path("mypath/json/whatever") 
@Consumes({MediaType.APPLICATION_JSON_VALUE}) 
public Response postClient(@Context HttpHeaders headers, String input) { 
    //Here the String input will be equal to the supplied json. 
    //... 
} 
Смежные вопросы