有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    使用@JsonIgnoreProperties(ignoreUnknown = true)注释Endpoint

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

    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);