我有一个称为的实体Checkout
,其中有一个用户和一个项目。因此,当用户想要创建一个新的签出对象时,他们POST
将“ / checkout”。现在,我正在考虑设置用户和项目,用户将改为包括用户名和序列号,例如:
{
"id": "1",
"user": "hassan",
"item": "sdf2ljt234jt09jsd"
}
然后,我将在Checkout类中编写使用String而不是Users and Items的自定义setter:
public void setUser(String username) {
this.user = ...
}
但是泽西从来没有打电话给我的二传手。用户属性和项目属性都保持为空,我不确定为什么。如果这不是用Jersey / Jackson设置对象的正确方法,我还有其他尝试吗?
您可以@JsonDeserialize
用来指定一个构建器类,该类可以包含从字符串到用户或项目的自定义逻辑:
@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;
}
}
}
请注意在@JsonProperty
Builder类的每个设置器上的用法,以及它们如何使用JSON中属性的名称。确保您的JSON结构正确映射到构建器字段中非常重要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句