1. Introduction
Cet article présente principalement comment utiliser SpringMVC Backend Services pour prendre en charge plusieurs types de valeur de retour (XML, JSON, HTML, Excel) via la configuration.
Le code ici utilise Springboot, Adresse de téléchargement: https://github.com/xiagn825/springboot-todolist/tree/springboot-contentNegotiation
2. Concepts de base
2.1 La différence entre les paramètres de type de contenu et accepter les paramètres de Httpheader
Accepter: le format de données à retourner au client par l'interface
curl --header 'accepter: application / json' http: // localhost: 8080 / todo
Type de contenu: le format de données envoyé par le client au serveur
curl -x put --header 'contenu-type: application / json' -d '{"title": "Weekend Schedule", "Content": "Sleep"}' http: // localhost: 8080 / todo2.2 Deux façons de générer une sortie dans Springmvc
1) Lorsque le serveur utilise la méthode Restful pour fournir uniquement des données pour l'AJAX du client ou d'autres demandes de serveur, @ResponseBody est généralement utilisé pour identifier votre retour. À l'heure actuelle, Spring utilise HttpMessageConverter pour formater l'objet retourné dans le format requis.
2) Lorsque vous devez fournir une couche de présentation (comme HTML), SpringMVC utilise ViewResolver pour traiter votre retour.
Parfois, votre demande doit fournir les deux
2.3 Détermination du format de sortie SpringMVC
Plusieurs fois, afin de prendre en charge plusieurs systèmes ou plusieurs terminaux, vous devez produire les mêmes données dans différentes manifestations.
SpringMVC utilise ContentNegotationsTrategy pour déterminer le format de données que l'utilisateur demande à obtenir.
ContentNegotationsStrategy utilise trois façons pour identifier le type de données que l'utilisateur souhaite retourner
Veuillez consulter la configuration ci-dessous
@OverRidePublic void configureContentNegotiation (contenuNegotiationConfigurer configure) {configurer.favorpathextension (false) .favorParameter (true) .Parametername ("mediatype") .defaultContentType (mediatype.application_json). .MediaType ("html", mediatype.text_html) .MediaType ("json", mediatype.application_json);}Ajoutez la configuration ci-dessus au webmvcconfig de votre projet, ce qui signifie clôturer le suffixe de règle d'URL, ouvrir la règle de paramètre de demande et définir le paramètre de demande à «MediaType». Le format de retour par défaut est JSON, et il prend également en charge le rendement XML et HTML.
Ces trois composants sont la clé pour renvoyer les sorties dans différents formats
2.4 demande de demande
2.4.1 Demandemappinghandlermapping
Ce que nous utilisons habituellement au printemps, c'est la demande de handicapage. Selon requestmappinginfo, nous affinons les conditions de correspondance. Le processus de recherche global est le suivant:
AbstracthandlerThodmapping Implémentation Interface Gethandlerinternal
1. Utilisez URLPathhelper pour trouver le chemin correspondant à la demande
2. Trouvez le handlerméthode correspondant au chemin
2.1 Trouver les conditions de correspondance de UrlMap RequestmappingInfo
2.2 Si la condition de correspondance se trouve dans la valeur équivalente, ajoutez-la à la condition de correspondance
2.3 Si aucune condition de correspondance n'est trouvée, utilisez la mise en place de demande de tous les handlermethods à correspondre
2.4 Triez les matchs, retirez le match la plus prioritaire et vérifiez s'il s'agit de la seule priorité la plus élevée
2.5: encapsuler les deux situations où les conditions sont appariées et les conditions ne sont pas appariées.
3. Encapsulez les handlermethod pour s'assurer que l'instance du haricot est stockée dans le contenuNegotiationManager, qui fournit une comparaison des conditions de correspondance pour Minitype, afin que le cadre puisse correspondre à la méthode de traitement la plus appropriée.
2.5 HttpMessageConverter
2.5.1 Les convertisseurs de message par défaut
Springmvc chargera les HTTPMessageConverters suivants par défaut:
ByteArrayhttpMessageConverter convertit octet arraySstringHttpMessageConverter converte StringsResourceHttpMessageConverter converte org.springframework.core.io.resource pour tout type de streamsourcehttpmessageconverter Converts Converts Converts octtreSourceHttpmeSageConverter Converts Converts StreamSourceHttPmeSageConverter Converts Converts StreamSourceHttPmeSageConver javax.xml.transform.sourceformHttpMessageConverter convertit les données du formulaire en / à partir d'un multivalemap <string, string> .jaxb2rootelementHttpMessageConverter converts java objets à / depuis xml (ajouté unique JSON (Ajouté uniquement si Jackson 2 est présent sur le ClassPath) MappingJacksonHttpMessageConverter convertit JSON (ajouté uniquement si Jackson est présent sur le ClassPath) ATOMFEEDHTTPMESSAGECONVERTER convertit les aliments pour ato Rome est présente sur le chemin de classe)
Si nous le retournons, il est identifié par @ResponseBody, le framework utilisera httpMessageConverter pour traiter la valeur de retour. Le couvercle XML par défaut n'est pas particulièrement utile et dépend de l'annotation @xmlrootelement sur l'objet Entity. Ce n'est pas très pratique. Par conséquent, nous introduisons la bibliothèque de classe auxiliaire et personnalisons le MessageConverter afin que l'objet retourné puisse être traité directement dans le format XML.
Gradle Import Library
Groupe de compilation: 'org.springframework', nom: 'Spring-oxm', version: '4.3.9.release'compile groupe:' com.thoughtworks.xstream ', nom:' xstream ', version:' 1.4.10 ''
Configuration
@OverRidePublic void ConfigureMessageConverters (list <httpMessageConverter <? >> convertisseurs) {converters.add (createExmlHttpMessageConverter ()); super.ConfigureMessageConverters (convertisseurs);} private httpMessageConverter <objet> createExmlHttpMessageConverter () {MarshallingHttpMessageConverter xmlConConse XstreamMarshaller xstreamMarshaller = new XStreamMarshaller (); xmlConverter.SetMarshaller (XStreamMarshaller); xmlConverter.SetUnmarShaller (XStreamMarshaller); retour xmlConverter;}2.6 Afficher la résolution
2.6.1 Page Render (freemarker)
Lorsque vous devez revenir à la page, vous devez dessiner l'image par un ViewResolver approprié, et ici vous utilisez Freemarker comme moteur de page.
Gradle Import Library
compiler ("org.springframework.boot: printemps-boot-starter-freemarker")Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.