Maison >Java >javaDidacticiel >Introduction aux méthodes pour étendre la prise en charge des requêtes et réponses XML dans Spring Boot

Introduction aux méthodes pour étendre la prise en charge des requêtes et réponses XML dans Spring Boot

不言
不言original
2018-09-27 16:02:242557parcourir

Ce que cet article vous apporte est une introduction aux méthodes d'extension de la prise en charge des requêtes et des réponses XML dans Spring Boot. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Dans tous les didacticiels Spring Boot précédents, nous avons mentionné et utilisé uniquement le traitement des requêtes et des réponses pour les formats HTML et JSON. Alors, comment regrouper rapidement des requêtes au format XML en objets dans le Controller, et comment renvoyer un objet au format XML ?

Principe d'implémentation : Message Converter (Message Converter)

Avant de développer la question ci-dessus, il faut d'abord savoir que l'implémentation de la gestion des requêtes HTTP dans Spring Boot utilise Spring MVC. Il existe un concept de convertisseur de messages dans Spring MVC, qui est principalement responsable du traitement des données de requête dans différents formats et de leur conversion en objets pour offrir une meilleure expérience de programmation.

L'interface HttpMessageConverter est définie dans Spring MVC, qui résume le jugement du convertisseur de messages sur le type, le jugement et le fonctionnement de la lecture et de l'écriture. Plus précisément, vous pouvez voir la définition suivante :

public interface HttpMessageConverter<T> {

    boolean canRead(Class<?> clazz, [@Nullable](https://my.oschina.net/u/2896689) MediaType mediaType);

    boolean canWrite(Class<?> clazz, [@Nullable](https://my.oschina.net/u/2896689) MediaType mediaType);

    List<MediaType> getSupportedMediaTypes();

    T read(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException;

    void write(T t, [@Nullable](https://my.oschina.net/u/2896689) MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException;

}

. Comme nous le savons tous, HTTP Le Content-Type demandé a différentes définitions de format. Si vous souhaitez prendre en charge la conversion des messages au format XML, vous devez utiliser le convertisseur correspondant. Spring MVC dispose déjà d'un ensemble de convertisseurs implémentés par Jackson, MappingJackson2XmlHttpMessageConverter, par défaut.

Implémentation étendue

Étape 1 : Présenter le convertisseur de messages XML

Dans les applications Spring traditionnelles, nous pouvons ajouter l'implémentation de la conversion de messages pour les données au format XML via la configuration suivante :

@Configuration
public class MessageConverterConfig1 extends WebMvcConfigurerAdapter {
    [@Override](https://my.oschina.net/u/1162528)
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.xml();
        builder.indentOutput(true);
        converters.add(new MappingJackson2XmlHttpMessageConverter(builder.build()));
    }
}

Dans l'application Spring Boot, vous n'avez pas besoin d'être aussi gênant que ci-dessus. Il vous suffit d'ajouter la dépendance jackson-dataformat-xml, et Spring Boot introduira automatiquement l'implémentation de MappingJackson2XmlHttpMessageConverter :

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

En même temps, les annotations utilisées pour configurer la relation entre les données XML et maintenir les attributs des objets sont également dans les dépendances ci-dessus, cette dépendance est donc également nécessaire.

Étape 2 : Définir la relation entre l'objet et 🎜> Parmi eux : @Data, @NoArgsConstructor, @AllArgsConstructor sont des annotations pour lombok pour simplifier le code, principalement utilisées pour générer des fonctions get, set et constructeur. Les annotations @JacksonXmlRootElement et @JacksonXmlProperty sont utilisées pour maintenir la correspondance entre les attributs d'objet en XML.

L'objet Utilisateur configuré ci-dessus, l'exemple XML qui peut être mappé est le suivant (vous pouvez utiliser le XML ci-dessus pour demander l'interface ultérieurement) :

@Data
@NoArgsConstructor
@AllArgsConstructor
@JacksonXmlRootElement(localName = "User")
public class User {

    @JacksonXmlProperty(localName = "name")
    private String name;
    @JacksonXmlProperty(localName = "age")
    private Integer age;

}

Étape 3 : Créer un interface pour recevoir les requêtes XML

Après avoir terminé l'objet à convertir, vous pouvez écrire une interface pour recevoir du XML et renvoyer du XML, telle que :

<User>
    <name>aaaa</name>
    <age>10</age>
</User>

Enfin, démarrez l'application Spring Boot et essayez via des outils de requête tels que POSTMAN. En regardant cette interface, vous pouvez voir que le XML est demandé et que le contenu XML traité est renvoyé. (

Code de cas

)

@Controller
public class UserController {

    @PostMapping(value = "/user", 
        consumes = MediaType.APPLICATION_XML_VALUE, 
        produces = MediaType.APPLICATION_XML_VALUE)
    @ResponseBody
    public User create(@RequestBody User user) {
        user.setName("didispace.com : " + user.getName());
        user.setAge(user.getAge() + 100);
        return user;
    }

}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn