我使用 GlassFish 4.1 (NetBeans),EclipseLink和默认的MOXy json绑定。
我有一个带有复合主键的实体。我需要输入和输出的扁平json结构。这似乎是直截了当的,但是......
如果我没有做任何特别的事情,我会在编组时得到一个扁平的json,但解组不起作用(key = null)。
如果我添加注释@XmlPath(".")
,则相反:解组工作正常,但json中的关键字段为重复。
此外,MOXy似乎在json中添加type
字段,我从未问过。
实体类:
PK:
@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都为null。而且,这个类型字段究竟是什么?
带注释:
XML:同上。
JSON:
[
{
"type":"sensor",
"address":"noaddress",
"id":24,
"address":"noaddress",
"id":24,
"name":"TEST MONNEY"
}
]
但是解组工作正常。
任何想法的人?
答案 0 :(得分:0)
好的,对于那些有同样问题的人,我终于让@EmbeddedId
替换为@IdClass
。
类SensorPk
保持不变,但Sensor
类被重写为:
@IdClass(SensorPk.class)
public class Sensor implements Serializable {
@Column(name = "sensor_id")
@Id private Integer id;
@Column(name = "sensor_address")
@NotNull
@Size(min = 1, max = 10)
@Id private String address = ADDRESS_DEFAULT;
@Column(name = "sensor_name")
@Size(min = 1, max = 45)
private String name;
}
变更是:
@IdClass
添加在顶部,SensorPk
@Id
字段