2017-10-11 23 views
0

我有一个简单的类:杰克逊反序列化 - 处理生成的值与没有字段

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进行注释。有关在这种情况下做什么的建议?

+0

你可以考虑[混合插件](https://开头stackoverflow.com/a/38889775/1426227)。 –

+0

当您使用@JsonIdentityInfo时,请尝试使用注释获取者而不是字段 –

+0

要求拥有@JsonView ?! – Generic

回答

0

使用@JsonIgnoreProperties(ignoreUnknown = true)

标注您Endpoint类或与下列选项会影响这一反序列化映射所有的POJO配置ObjectMapper

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);