Я создал очень простой сервиз RESTful, используя Джерси, после этого guide. я настроил сгенерированный код образца, чтобы иметь полиморфный структуру, где животное является базовым классом и овец и коз наследовать от него:Джерси - ответ JSON пуст, если используется полиморфизм
@XmlRootElement
public abstract class Animal {
public Animal() {}
}
@XmlRootElement
public class Sheep extends Animal {
public String fur;
public Sheep() {this.fur = "curly";}
}
@XmlRootElement
public class Goat extends Animal {
public String color;
public Goat() {this.color = "yellow";}
}
и следующий класс ресурса, который производит ответ:
@Path("animal")
public class MyResource {
@GET
@Path("{animal}")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Animal getIt(@PathParam("animal") String animal) {
return (animal.equals("sheep")) ? new Sheep() : new Goat();
}
}
в зависимости проекта в моей pom.xml являются:
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>
</dependencies>
при запуске приложения в Eclipse, на сервере (с помощью Tomcat V8.0, если этот вопрос s) и попытаться запросить ответ XML, например. в браузере, выход правильно так:
<sheep>
<fur>curly</fur>
</sheep>
или, если я прошу козу:
<goat>
<color>yellow</color>
</goat>
, но как только я прошу ответ JSON, вывод пустой JSON документа: {} я использую локон, чтобы получить JSON типа носителя, как это:
curl -H "Accept: application/json" http://localhost:8080/simple-service-webapp/api/animal/goat
Что мне нужно настроить или изменить, чтобы получить ответ JSON, представляющий правильный объект? Я новичок в этой теме, я надеюсь, что вопрос ясен. Спасибо.
PS: Если возвращаемый тип метода getIt установлен, например, Объект Sheep and Sheep возвращается, ответ JSON правильный, поэтому я полагаю, что мне нужно каким-то образом нанести наследование наследование, чтобы он распознал возвращаемый тип, но я не могу узнать, что делать.
Это работает, спасибо, есть также способ избавиться от собственности "типа"? – martin
Хм. Я даже не обращал на это внимания. Позвольте мне посмотреть на него –
Я думаю, вы найдете ответ [здесь] (http://stackoverflow.com/a/14213149/2587435). Не успевайте проверить это. Но также обратите внимание, что с 'jersey-media-json-jackson' вместо MOXy вы не получите этого поведения –