Используя последнюю версию CXF и других зависимостей, я пытаюсь объединить тестовые веб-службы, которые производят и потребляют JSON. Тест работает, когда аргумент метода является String, но не выполняется, когда аргумент является настраиваемым объектом. Ниже приводится образец ресурса:Невозможно развязать JSON-to-object с JAX-RS (CXF)
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("testPost")
public Employee getPostTest(Employee data) {
return data;
}
Ниже приводится выдержка из теста
List<Object> providers = new ArrayList<Object>();
providers.add(new JacksonJaxbJsonProvider());
WebClient client = WebClient.create(ENDPOINT_ADDRESS, providers);
client.accept("application/json");
client.type("application/json");
client.path("users/testPost/");
Employee e = new Employee();
e.setName("Test");
Response r = client.post(e);
Последняя строка кода выше выдает следующее исключение:
5 декабря 2016 2 : 46: 50 AM org.apache.cxf.jaxrs.utils.JAXRSUtils logMessageHandlerProblem SEVERE: для класса com.finity.model.Employee, ContentType: application/json Dec 05, 2016 2:46:50 org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse ВНИМАНИЕ: javax.ws.rs.WebApplicationException: HTTP 415 Неподдерживаемый тип носителя на org.apache.cxf.jaxrs.utils .JAXRSUtils.readFromMessageBody (JAXRSUtils.java:1315) на org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter (JAXRSUtils.java:826) в org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters (JAXRSUtils .java: 789)
Пытался читать с помощью JSONParser, но не идти:
Employee e = new Employee();
e.setName("Test");
Response r = client.post(e);
MappingJsonFactory factory = new MappingJsonFactory();
JsonParser parser = factory.createJsonParser((InputStream)r.getEntity());
Да, уже добавлен, но до сих пор, что исключение приходит. providers.add (новый JacksonJaxbJsonProvider()); и providers.add (новый JacksonJsonProvider()); попробовали оба этих провайдера. –
Вы используете Jaxb? Пожалуйста, напишите код «Employee», чтобы узнать, какие теги вы используете, и код, запускающий сервер jax-rs. – pedrofb
. Модель сотрудника - это класс POJO с только полем имени и без аннотации к классу. Хотя я пробовал аннотации JsonAutoDetect и JsonSerialize в классе Employee, но это не помогло. –