我有一个名为$SPARK_CLASSPATH
的实体,它有一个用户和一个项目。因此,当用户想要创建新的结帐对象时,他们Checkout
到" / checkout"。现在,我正在考虑设置用户和项目,用户将改为包含用户名和序列号,例如:
POST
然后我会在我的Checkout类中编写自定义setter,它使用Strings而不是Users和Items:
{
"id": "1",
"user": "hassan",
"item": "sdf2ljt234jt09jsd"
}
但泽西岛从不打电话给我的二传手。用户和项属性都保持为空,我不确定原因。如果这不是使用Jersey / Jackson设置对象的正确方法,那还有什么我应该尝试的吗?
答案 0 :(得分:3)
您可以使用@JsonDeserialize
指定一个构建器类,该类可以保存用于从String转换为User或Item的自定义逻辑:
@JsonDeserialize(builder = Checkout.Builder.class)
public class Checkout {
private Long id;
private User user;
private Item item;
// getters and setters
public static class Builder {
private Long id;
private String username;
private String serialNumber;
@JsonProperty("id")
public Builder setId(Long id) {
this.id = id;
return this;
}
@JsonProperty("user")
public Builder setUsername(String username) {
this.username = username;
return this;
}
@JsonProperty("item")
public Builder setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
return this;
}
public Checkout build() {
Checkout checkout = new Checkout();
checkout.setId(id);
checkout.setUser(/* lookup user by username */);
checkout.setItem(/* lookup item by serialNumber */);
return checkout;
}
}
}
请注意在Builder类的每个setter上使用@JsonProperty
以及它们如何使用JSON中的属性名称。确保您的JSON结构正确映射到构建器字段非常重要。