杰克逊反序列化 - 处理没有字段的生成值

时间:2017-10-11 12:57:37

标签: java json jackson deserialization json-deserialization

我有一个简单的课程:

@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”,   “phoneNumber”,“user”])

由于URI是生成的值,因此没有要使用@JsonIgnore进行批注的字段。关于在这种情况下该怎么做的任何建议?

1 个答案:

答案 0 :(得分:0)

使用Endpoint

为您的@JsonIgnoreProperties(ignoreUnknown = true)课程添加注释

或者使用以下选项配置ObjectMapper以影响使用此Mapper反序列化的所有POJO:

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);