我有一个看起来像这样的实体(为简洁起见,我省略了getter,setter和constuctors):
@Entity
public class System {
@NotNull
@Column(name = "SYSTEMID", nullable = false)
@Embedded
private SystemId systemId;
}
SystemId的如下所示:
@Embeddable
@JsonSerialize(using = SystemIdSerializer.class)
@JsonDeserialize(using = SystemIdDeserializer.class)
public class SystemId {
@Column(name = "SYSTEMID", nullable = false)
private String value;
}
我的自定义序列化程序除了写出值之外什么都不做,它适用于'普通'JSON,而不是看起来像这样的HAL表示:
{
"systemId": {
"content": "1"
}
}
我想要像这样
{
"systemId": "1"
}
也是。 有什么办法吗?我花了一些时间用谷歌搜索但没有成功。 感谢。
答案 0 :(得分:2)
也许projection可以帮助你......
@Projection(name="withSystemId", types = System.class)
public interface WithSystemId {
@JsonProperty("systemId")
@Value("#{target.systemId.value}")
String getSysId();
// Other getters of System properties...
}
然后尝试获取您的System
:
http://localhost:8080/api/systems?projection=withSystemId
<强>已更新强>
关于自定义序列化程序 - 只需将@JsonUnwrapped
注释添加到systemId
:
@Entity
public class System {
@Embedded
@JsonUnwrapped
private SystemId systemId;
}
然后你必须得到你期望的
{
"systemId": "1"
}
我认为你的序列化器看起来像这样:
public class SystemIdSerializer extends StdSerializer<SystemId> {
public SystemIdSerializer() {
this(null);
}
protected SystemIdSerializer(Class<SystemId> t) {
super(t);
}
@Override
public void serialize(SystemId id, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
gen.writeNumberField("systemId", id.value());
gen.writeEndObject();
}
}
工作示例是here。请参阅Member
和嵌套的MemberSkill
类。然后尝试启动应用并获取http://localhost:8080/api/members