2015-09-05 7 views
1

Я хочу сделать запрос POST для веб-сервиса REST, и я хочу передать клиентский объект java с запросом POST. Но в ответе отображается код ошибки 415 Unsupported Media.
Мои REST Clientответил (-а) ответным вопросом: 415 Неподдерживаемый тип носителя REST-клиент

Client client = Client.create(); 
WebResource resource = client.resource("http://localhost:8080/cthix/rest/v1/m2"); 

Customer cust = new Customer(); 
cust.setId(101L); 
ObjectMapper mapper = new ObjectMapper(); 
String jsonCustomer = mapper.writeValueAsString(cust); 

ClientResponse restResponse = resource.accept("application/json"). 
        post(ClientResponse.class,jsonCustomer); 

        System.out.println(restResponse.getStatus()); 
        if(restResponse.getStatus()==200){ 
         String output = restResponse.getEntity(String.class); 
         PrintWriter pw = response.getWriter(); 
         pw.print(output); 

         pw.flush(); 
         pw.close(); 
        } 

Мои ОСТАЛЬНЫЕ УСЛУГИ:

@Path(value = "/v1") 
public class V1_status { 
    @Path("/m2") 
    @POST 
    @Produces(MediaType.APPLICATION_JSON) 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Customer returnCustomerDetails(Customer customer){ 
     Set<Integer> phones = new HashSet<Integer>(); 
     phones.add(123424541); 
     phones.add(123432123); 

     List hobbies= new ArrayList(); 
     hobbies.add("Swimming"); 
     hobbies.add("coding");; 

     customer.setHobbies(hobbies); 
     customer.setPhones(phones); 
     customer.setCity("Noida"); 
     customer.setName("abhishek"); 
     return customer; 
    } 
} 

Пожалуйста, руководство, как это исправить.

+0

У вас есть поставщик json? Можете ли вы показать все свои зависимости. –

ответ

2

я на самом деле есть проблема, вещь, которую я пропустил был: resource.type ("применение/JSON")

ClientResponse restResponse = resource.accept("application/json").type("application/json").post(ClientResponse.class,cust); 

Две точки, которые должны быть оплачены внимание:.
1) Нет необходимости конвертировать объект клиента в Json вручную (если и не конвертировать также не проблема вообще)

2) Нет необходимости использовать @Consumes (MediaType .APPLICATION_JSON). если и даже использовать, без проблем. Это только говорит, что этот метод примет этот MediaType. Если вы не используете аннотацию @Consumes, метод REST Service попытается использовать ее в любом формате, который будет использоваться, и попытается проанализировать данные, поступающие от клиента, к соответствующему объекту модели (в аргументе). Если успешно проанализирована проблема. Если данные не соответствуют соответствующему формату для синхронизации с объектом модели. Это будет исключение. Вот и все.

1

Проблема заключается в том, что вы сообщаете службе, чтобы использовать JSON, клиент параметров имеет тип Customer, а на вашем клиенте REST вы отправляете строку.

Вы должны

  1. Удалить "@Consumes (MediaType.APPLICATION_JSON)" от службы отдыха
  2. В клиенте: посланный объект клиента (вместо его JSon представления)
+0

Теперь 'Caused by: com.sun.jersey.api.client.ClientHandlerException: писатель тела сообщения для типа Java, класс com.novo.rest.model.model.Customer и тип носителя MIME, application/octet-stream, не обнаружено Исключение приходит –

+0

Из трассировки стека, какая строка точно вызывает вышеупомянутое исключение? – chrisl08

+0

У меня проблемы, ваши обе точки верны. то, что я пропустил, было resource.type («application/json»). Таким образом, строка должна быть 'resource.accept (" application/json "). Type (" application/json "). Post (ClientResponse.class, customer);' –

Смежные вопросы