java Jackson反序列化处理不带字段的生成值
我有一个简单的课程:
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope = Endpoint.class)
public class Endpoint {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonView({View.Endpoint.class, View.User.class})
private Long id;
@NotNull
@NotEmpty(message = "Phone number is required.")
@JsonView({View.Endpoint.class, View.Call.class, View.User.class})
private String phoneNumber;
@JsonView({View.Endpoint.class, View.Call.class, View.User.class})
private String callerId;
@ManyToOne(optional = false)
@JsonView(View.Endpoint.class)
@ApiModelProperty(hidden = true)
private User user;
...
@Override
@JsonView({View.Endpoint.class, View.Call.class, View.User.class})
public String getUri() {
return EndpointController.BASE_PATH + "/" + getId();
}
}
尝试反序列化时出现以下错误:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "uri" (class com.example.server.telephony.endpoint.Endpoint), not marked as ignorable (5 known properties: "id", "label", "callerId", "phoneNumber", "user"])
因为URI是一个生成的值,所以没有可以用@JsonIgnore
注释的字段。在这种情况下有什么建议吗
# 1 楼答案
使用
@JsonIgnoreProperties(ignoreUnknown = true)
注释Endpoint
类或者使用以下选项配置
ObjectMapper
,以影响使用此映射器反序列化的所有POJO: