杰克逊反序列化 - 处理生成的值与没有字段
问题描述:
我有一个简单的类:杰克逊反序列化 - 处理生成的值与没有字段
com.fasterxml.jackson.databind:
@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(); } }
尝试反序列化时,我得到了下面的错误。 exc.UnrecognizedPropertyException: 无法识别的字段 “URI”(类 com.example.server.telephony.endpoint.Endpoint),未标记为 忽略(5个已知性质: “ID”, “标签”, “来电”, “ phoneNumber“,”user“])
由于URI是一个生成的值,所以没有字段用@JsonIgnore
进行注释。有关在这种情况下做什么的建议?
答
使用@JsonIgnoreProperties(ignoreUnknown = true)
标注您Endpoint
类或与下列选项会影响这一反序列化映射所有的POJO配置ObjectMapper
:
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
你可以考虑[混合插件](https://开头*.com/a/38889775/1426227)。 –
当您使用@JsonIdentityInfo时,请尝试使用注释获取者而不是字段 –
要求拥有@JsonView ?! – Generic