JAXB REST PUT'ting ссылочная ассоциация - PullRequest
1 голос
/ 18 сентября 2011

Рассмотрим следующие классы сущностей:

  • Manufacturer: представляет производителя автомобилей (Ford, Volvo, ...) и имеет название.
  • Model: представляет модель (Fiesta, S80), имеет название и выпускается одним производителем.

Поле производителя в модели помечено следующим образом:

@ManyToOne
@XmlIDREF
private Manufacturer manufacturer;

Затем у меня есть два ресурса REST, определенные для получения и размещения как производителей, так и типов. Проблема с нанесением типов:

@PUT
@Consumes("application/xml")
public void putModel(JAXBElement<Model> model) {
    modelFacade.create(model.getValue());
}

и XML, который я пытаюсь поставить:

<model>
    <name>Fiesta</name>
    <manufacturer>1</manufacturer>
</model>

Элемент производителя указывает на 1, действительный экземпляр Manufacturer, однако, когда Модель сохраняется, MANUFACTURER_ID равен null. Как я могу заставить JAXB считывать идентификатор производителя из XML?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 18 сентября 2011

Попробуйте добавить гиперссылку на производителя вместо идентификатора (чтобы сделать его более RESTful).См. это электронное письмо из списка рассылки users @ jersey, пример которого приведен.

1 голос
/ 19 сентября 2011

Следующий ответ, который я дал на аналогичный вопрос, может помочь.Он использует XmlAdapter для преобразования ссылочного объекта в / из идентификатора:

Чтобы использовать это в среде JAX-RS для создания службы RESTful, вам потребуется использовать MessageBodyReader, чтобы установить экземпляр EntityManager на XmlAdapter, передаваемом Unmarshaller.

...