Я использую GlassFish 4.1 (NetBeans), EclipseLink и привязку MOXy json по умолчанию.
У меня есть объект с составным первичным ключом. Мне нужна плоская структура json как для ввода, так и для вывода. Вроде прямо, но...
Если я ничего особенного не делаю, при маршаллинге я получаю сглаженный json, но демаршаллинг не работает (key = null).
Если я добавляю аннотацию @XmlPath(".")
, то все наоборот: десортировка работает, но ключевые поля дублируются в json.
Кроме того, MOXy, кажется, добавляет поле type
в json, о котором я никогда не спрашивал.
Классы сущностей:
ПК:
@Embeddable
public class SensorPk implements Serializable {
@Column(name = "sensor_id")
private Integer id;
@Column(name = "sensor_address")
@NotNull
@Size(min = 1, max = 10)
private String address = ADDRESS_DEFAULT;
// + getter/setters
}
Сущность: (@org.eclipse.persistence.oxm.annotations.XmlPath
комментируется)
@Entity
@XmlElement
@Table(name = "sensors")
public class Sensor implements Serializable{
@EmbeddedId
// @XmlPath(".")
private SensorPk composedId;
@Column(name = "sensor_name")
@Size(min = 1, max = 45)
private String name;
// + getter/setters
}
Конфигурация приложения:
@javax.ws.rs.ApplicationPath("api")
public class ApplicationConfig extends ResourceConfig {
public ApplicationConfig() {
packages("ch.derlin.glf.bbdata");
}
}
Я также пытался установить jackson
(1.X и 2.X), но не удалось заставить его работать на Glassfish 4.
Вывод без какой-либо аннотации:
XML:
<sensors>
<sensor>
<address>noaddress</address>
<id>24</id>
<name>TEST</name>
</sensor>
</sensors>
JSON:
[
{
"type":"sensor",
"address":"noaddress",
"id":24,
"name":"TEST MONNEY"
}
]
Хорошо, но распаковка одного и того же json не удалась: id и address равны нулю. А также, что это за тип поля?
С аннотацией:
XML: там же.
JSON:
[
{
"type":"sensor",
"address":"noaddress",
"id":24,
"address":"noaddress",
"id":24,
"name":"TEST MONNEY"
}
]
Но демаршаллинг работает правильно.
Любая идея, ребята?