2015-11-03 2 views
2

У меня есть службаRestful службы аргумент несовпадение исключение

@POST 
    @Path("/post") 
    @Consumes("application/json") 
    public Response createProductInJSON(Product product) { 
     String result = "Product created : " + product; 
     return Response.status(201).entity(result).build(); 
    } 

и потребитель

url = new URL(
       "http://localhost:8080/TestRestWebService/json/product/post"); 
     conn = (HttpURLConnection) url.openConnection(); 
     conn.setDoOutput(true); 
     conn.setRequestMethod("POST"); 
     conn.setRequestProperty("Content-Type", "application/json"); 
     Gson gson = new Gson(); 
     Product p = new Product(); 
     p.setName("varun"); 
     p.setQty(33); 
     String input = gson.toJson(p).toString(); 

     OutputStream os = conn.getOutputStream(); 
     os.write(input.getBytes()); 
     os.flush(); 
     if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) { 
      throw new RuntimeException("Failed : HTTP error code : " 
        + conn.getResponseCode()); 
     } 

взятую из link

потребителя метание

Exception in thread "main" java.lang.RuntimeException: Failed : HTTP error code : 500 
at com.mkyong.rest.Consumer.main(Consumer.java:52) 

WHe ре, как веб-сервис бросает

SEVERE: Failed executing POST /json/product/post org.jboss.resteasy.spi.InternalServerErrorException: Bad arguments passed to public javax.ws.rs.core.Response com.mkyong.rest.JSONService.createProductInJSON(com.mkyong.rest.Product) 
(org.jboss.resteasy.spi.BadRequestException org.jboss.resteasy.spi.BadRequestException: Could not find message body reader for type: class com.mkyong.rest.Product of content type: application/json) 
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:181) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.IllegalArgumentException: argument type mismatch at 

хотя product класс имеет 2 Params только qty, name только.

Lib

+0

В нем говорится, что нет читателя (провайдера). У вас есть провайдер JSON? Если нет, вы должны добавить его. См. [Здесь] (http://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-jackson2-provider). Выберите версию RESTeasy –

+0

did not help, у меня было уже добавлено – Varun

+0

Вы добавили банку или зависимость? Одной банки недостаточно. –

ответ

1

Сообщение об ошибке

Coul не d найти сообщение читателя тела для типа: класс com.mkyong.rest.Product типа содержимого: приложения/JSON

Это означает, что либо у вас нет MessageBodyReader, который может обрабатывать JSON или у вас есть один и не зарегистрировано.

В вашем случае, у вас есть resteasy-jackson-provider, но он по-прежнему зависит от остальных основных библиотек Джексона, которые

  • jackson-core-asl
  • jackson-jaxrs
  • jackson-mapper-asl
  • jackson-xc

Для вашего участия ар версии resteasy-jackson-provider:2.2.1, используемая версия Джексона 1.6.3. Вы можете загрузить эти банки here. Просто прокрутите вниз и нажмите кнопку 1.6.3 для каждой из банок, а затем нажмите Загрузить (JAR) для каждой из этих банок и добавить их в свой проект.

Для тех, кто не использует версию RESTeasy версии 2.2.1, вы должны выбрать правильную версию Jackson, которая поставляется с вашей версией RESTeasy. Вы можете увидеть here и выбрать версию RESTeasy, которую вы используете.

Также обратите внимание, что ссылки, которые я предоставил, предназначены для версии Jackson 1.x, так как это версия, которую использует resteasy-jackson-provider. Если вы используете новую версию RESTeasy 3.x, есть и Джексон 2.x в `resteasy-jackson2-provider

0

Похоже, 'приложения/JSON' не может быть решена

@Consumes(MediaType.APPLICATION_JSON) 

Убедитесь, что вы добавить правильную зависимость

<dependency> 
    <groupId>org.jboss.resteasy</groupId> 
    <artifactId>resteasy-jackson-provider</artifactId> 
    <version>3.0.13.Final</version> 
</dependency> 
+0

У меня есть resteasy-jackson-provider jar available ... все тот же .. также тип носителя не помог – Varun

+0

Вы хотите вернуть объект JSON? если это так, вы должны добавить @Produces (MediaType.APPLICATION_JSON) – caesiium

+0

. Проблема заключается в том, что он не может сопоставить подпись метода (не на основе типа возврата), а на основе orgument – Varun

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