【发布时间】:2018-03-23 03:54:07
【问题描述】:
我有一个简单的课程:
@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: 无法识别的字段“uri”(类 com.example.server.telephony.endpoint.Endpoint),未标记为 可忽略(5 个已知属性:“id”、“label”、“callerId”、 "电话号码", "用户"])
由于 URI 是生成的值,因此没有要使用 @JsonIgnore 注释的字段。有什么建议可以在这种情况下做什么?
【问题讨论】:
-
你可以考虑mix-ins。
-
尝试注释 getter 而不是字段
-
当您使用@JsonIdentityInfo 时,@JsonView 有什么要求?!
-
@Generic 当我解析具有一对多关系的
User或Endpoint类时,我使用@JsonView来避免循环。在不同的时间添加了这些,所以没有评估我是否需要两者。使用@JsonIdentityInfo是否处理循环引用? -
@JsonIdentityInfo 可以处理循环
标签: java json jackson deserialization json-deserialization