Glassfish 4.1 - JSON 带有 EclipseLink 和 MOXy 的网络服务:@EmbeddedId 重复问题
Glassfish 4.1 - JSON webservice with EclipseLink and MOXy: @EmbeddedId duplication troubles
我使用 GlassFish 4.1 (NetBeans)、EclipseLink 和默认的 MOXy json 绑定。
我有一个带有复合主键的实体。我需要一个 flat 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 为空。还有,这个类型字段是什么鬼?
有注释:
XML:同上。
JSON:
[
{
"type":"sensor",
"address":"noaddress",
"id":24,
"address":"noaddress",
"id":24,
"name":"TEST MONNEY"
}
]
但解组工作正常。
伙计们有什么想法吗?
好的,对于那些有同样问题的人,我终于成功地将 @EmbeddedId
替换为 @IdClass
。
class SensorPk
保持不变,但 Sensor
class 被重写为:
@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
我使用 GlassFish 4.1 (NetBeans)、EclipseLink 和默认的 MOXy json 绑定。
我有一个带有复合主键的实体。我需要一个 flat 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 为空。还有,这个类型字段是什么鬼?
有注释:
XML:同上。
JSON:
[
{
"type":"sensor",
"address":"noaddress",
"id":24,
"address":"noaddress",
"id":24,
"name":"TEST MONNEY"
}
]
但解组工作正常。
伙计们有什么想法吗?
好的,对于那些有同样问题的人,我终于成功地将 @EmbeddedId
替换为 @IdClass
。
class SensorPk
保持不变,但 Sensor
class 被重写为:
@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