2017-10-11 16 views
0

J'ai une classe simple:Jackson désérialisation - traitement des valeurs générées sans champs

@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(); 
    } 

} 

je reçois l'erreur suivante lorsque vous essayez de désérialiser:

com.fasterxml.jackson.databind. exc.UnrecognizedPropertyException: Champ non reconnu "uri" (classe com.example.server.telephony.endpoint.Endpoint), non marqué ignable (5 propriétés connues: "id", "label", "callerId", " phoneNumber "," user "])

Comme l'URI est une valeur générée, il n'y a pas de champ à annoter avec @JsonIgnore. Des suggestions sur ce qu'il faut faire dans ce cas?

+0

Vous pourriez envisager [mix-ins] (https: // stackoverflow.com/a/38889775/1426227). –

+0

Essayez d'annoter des getters au lieu des champs –

+0

lorsque vous utilisez @JsonIdentityInfo, qu'est-ce qui est requis pour avoir @JsonView ?! – Generic

Répondre

0

annoter vos Endpoint classe en utilisant @JsonIgnoreProperties(ignoreUnknown = true)

Ou configurer le ObjectMapper avec l'option suivante pour affecter tous les POJO désérialisés cette Mapper:

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);