2016-04-30 1 views
0

J'utilise spring-framework 4.2.5 et Jackson 2.6.3 dans mon application. J'utilise @jsonView pour les entités serializer correctes. Mais cela ne fonctionne pas correctement pour deserializer. Par exemple, j'ai une entité comme suit:La désérialisation de Jackson ignore les propriétés ne fonctionne pas correctement avec @JsonView

public class A { 

    @JsonView(View.Summary.class) 
    private int a; 

    @JsonView(View.Detail.class) 
    private int b 

    /* 
    * Getters And Setters 
    */ 
} 

Maintenant, j'ai un contrôleur comme suit:

@RestController 
@RequestMapping("/a") 
public class AController { 

    @RequestMapping("/add") 
    @JsonView(View.Summary.class) 
    public void add(@RequestBoddy A a) 
    { 
     // do Something 
    } 

} 

Lorsque j'envoie un JSON comme suivre cette méthode:

{ 
    "a": 1, 
    "b": 2 
} 

Parce que J'utilise View.Summary.class JsonView pour cette méthode, il doit ignorer b, mais ce n'est pas le cas.

J'utilise une configuration en objet mappeur comme suit: objectMapper.enable(DeserializerFeature.FAIL_ON_IGNORED_PROPERTIES)

Où est le problème?

+1

Vous êtes sûr que l'annotation est JsonView non JsonViwe – Joeblade

Répondre

1

Utilisez @JsonView(View.Summary.class) sur le paramètre:

@RequestMapping("/add") 
public void add(@RequestBoddy @JsonView(View.Summary.class) A a) { 
    // do Something 
} 

Et aussi, utilisez nullables types pour vos DTO s:

public class A { 
    @JsonView(View.Summary.class) 
    private Integer a; 

    @JsonView(View.Detail.class) 
    private Integer b 

    /* 
    * Getters And Setters 
    */ 
} 

Sinon, vous ne serez pas en mesure de dire Valeurs par défaut et Valeurs manquantes séparément.

+1

Êtes-vous sûr que c'est JsonViwe et non JsonView? – Joeblade

+0

C'était une faute de frappe, merci de m'avoir signalé. –