Printemps 3.2 et Jackson 2: ajouter un objet personnalisé mappeur
Je suis l'élaboration d'un RESTE d'un webservice dans spring MVC. J'ai besoin de changer la façon dont jackson 2 sérialiser mongodb objectids. Je ne suis pas sûr de savoir quoi faire parce que j'ai trouvé partielle de la documentation pour jackson 2, ce que j'ai fait est de créer un personnalisé sérialiseur:
public class ObjectIdSerializer extends JsonSerializer<ObjectId> {
@Override
public void serialize(ObjectId value, JsonGenerator jsonGen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
jsonGen.writeString(value.toString());
}
}
Créer un ObjectMapper
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper() {
SimpleModule module = new SimpleModule("ObjectIdmodule");
module.addSerializer(ObjectId.class, new ObjectIdSerializer());
this.registerModule(module);
}
}
puis enregistrer le mappeur de
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="my.package.CustomObjectMapper"></bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
Mon CustomConverter n'est jamais appelée. Je pense que le CustomObjectMapper définition est fausse,je me suis adapté à partir de quelques lignes de codes pour jackson 1.x
Dans mes contrôleurs, je suis en utilisant @ResponseBody.
Où suis-je fais de mal? Grâce
Sérialiseur et d'enregistrement de corriger pour moi, alors je pense que le problème réside dans la configuration xml.
Yep, merci pour la suggestion, j'ai eu un vide <mvc:annotation-driven> tag autour du fichier. Ça fonctionne maintenant
Pour info les docs disent utiliser StdSerializer à la place: fasterxml.github.io/jackson-databind/javadoc/2.0.0/com/...
Je vais avoir un problème similaire. Pouvez-vous s'il vous plaît poster final de votre solution de travail?
Dans mon projet, nous avons étend StdSerializer au lieu de JsonSerializer, mais ce n'est pas le problème. Assurez-vous que vous utilisez com.fasterxml.* les classes et pas vieux org.codehaus.* les classes?
Yep, merci pour la suggestion, j'ai eu un vide <mvc:annotation-driven> tag autour du fichier. Ça fonctionne maintenant
Pour info les docs disent utiliser StdSerializer à la place: fasterxml.github.io/jackson-databind/javadoc/2.0.0/com/...
Je vais avoir un problème similaire. Pouvez-vous s'il vous plaît poster final de votre solution de travail?
Dans mon projet, nous avons étend StdSerializer au lieu de JsonSerializer, mais ce n'est pas le problème. Assurez-vous que vous utilisez com.fasterxml.* les classes et pas vieux org.codehaus.* les classes?
OriginalL'auteur alex | 2013-01-16
Vous devez vous connecter pour publier un commentaire.
Vous devez annoter modèle correspondant terrain avec @JsonSerialize annontation. Dans votre cas, il peut être:
Mais à mon avis, il devrait mieux ne pas utiliser des modèles d'entité comme VOs. Une meilleure façon est d'avoir des modèles différents et carte entre eux.
Vous pouvez trouver mon exemple du projet ici (j'ai utilisé de la date de sérialisation avec le Printemps, les 3 et Jackson 2 à titre d'exemple).
OriginalL'auteur
Comment je pourrais faire c'est:
Créer une annotation pour déclarer votre personnalisé sérialiseurs:
Configurer le composant d'analyse à cet effet dans votre mvcconfiguration fichier
et de créer une classe qui implémente
HttpMessageConverter<T>
.Créer une classe qui
extends AnnotationMethodHandlerAdapter implements InitializingBean
.Je crois que c'est tout ce qui est nécessaire pour votre objectif.
Acclamations.
Cette réponse a tellement inutile complexité. L'OP est en train de faire de la bonne façon.
OriginalL'auteur
Il n'est pas nécessaire de créer un objet mappeur. Ajouter jackson-core-2.0.0.jar et jackson-annotations-2.0.0.jar pour votre projet.
Maintenant, ajoutez les lignes de code suivantes à votre contrôleur en distribuant le service:
Ne manquez pas l'un des annotations.
OriginalL'auteur