2015-05-13 11 views
1

У меня есть служба REST и клиент. Я пытаюсь вызвать эту службу, чтобы напрямую использовать JSON и преобразовать ее в объект, который мне нужен. Но это не работает. Я получаю следующую ошибку: читатель тела сообщения для класса Java com.a.b.c.D и класс типа Java com.a.b.c.D и MIME application/json не был найден.Джерси Служба REST не потребляет JSON

Услуги:

@Path("/getListPrice") 
public class ListPriceService { 

     @POST 
     @Consumes(MediaType.APPLICATION_JSON) 
     @Produces(MediaType.APPLICATION_JSON) 
     @Type(PricingObject.class) 
     public Response search(PricingObject pricingObject, @Context final HttpHeaders headers) { 
       ......... 
       return Response.ok().entity(pricingObject).build(); 
     } 
} 

Клиент:

WebResource webResource = client.resource(url);    
ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON) 
          .type(MediaType.APPLICATION_JSON_TYPE) 
          .post(ClientResponse.class, pricingObjectRequest); 

if (response.getStatus() != 200) { 
    throw new RuntimeException("Failed : HTTP error code : " + response.getStatus()); 
} 

Может кто-нибудь сказать мне, что происходит не так?

ответ

0

A message body reader for Java class com.a.b.c.D, and Java type class com.a.b.c.D, and MIME media type application/json was not found

Вы не сказали, если вы получаете на стороне исключения сервера или на стороне клиента исключение а. Если первое, у вас либо нет провайдера JSON, либо у вас есть один, но он не настроен.

Вот провайдер

Вот конфигурация web.xml

<init-param> 
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
    <param-value>true</param-value> 
</init-param> 

Если это на стороне клиента исключение, я предполагаю, что вы имеете выше зависимость. Затем просто сконфигурируйте его с клиентом

ClientConfig config = new DefaultClientConfig(); 
config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); 
Client client = Client.create(config); 
+0

Я добавил изменения, которые вы упомянули, к моему web.xml, а также моему клиенту, но все же я получаю ту же проблему. –

+0

Является ли это проблемой на стороне сервера? Это где вы получаете исключение? Если да, то покажите ваш web.xml –

+0

я понял вопрос, то INIT-парам не был добавлен правильно, а также пришлось добавить \t \t \t com.sun.jersey.config.property.resourceConfigClass \t \t \t com.sun.jersey.api.core.PackagesResourceConfig \t \t

-1

Вы можете изменить свой класс ресурса, как показано ниже

/**<code> 
    * { 
    * "id"=1, 
    * "name="priceitem1" 
    * } 
    * </code> 

    **/ 
    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response search(PricingObject pricingObject) { 
     JSONArray jsarray=new JSONArray(); 
     jsarray.put(pricingObject); 
     return Response.ok().entity(jsarray.toString()).build(); 
    } 

Данные whci находится между тегами являются данные, которые JSON будет исходить от клиента.

вы можете настроить класс компонента, как показано ниже

public class PricingObject { 
@XmlElement(name="id") 
private int id; 
@XmlElement(name="name") 
private String name; 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

}

@xmlelement свяжут ключи JSon с переменным класса боб.

0

Вам нужно настроить Джерси, чтобы использовать дескриптор Json -> Object mapping. С помощью Джерси 1 вам нужно добавить поставщика json в свои зависимости, например.

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-json</artifactId> 
    <version>1.17.1</version> 
</dependency> 
+0

Хорошо, где я могу это сделать? Я использую зависимость Джерси 1.17.1 maven. –

+0

Я обновил ответ, чтобы дать пример maven с используемой версией – tddmonkey

+0

У меня уже была эта зависимость, я все еще получаю ту же проблему, даже попробовал ответить ниже, но не повезло. –

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