Maison  >  Article  >  Java  >  Exemple de code du convertisseur de messages Spring

Exemple de code du convertisseur de messages Spring

零下一度
零下一度original
2017-07-19 16:48:391349parcourir

//domain

package com.crazy.goods.tools;/**
 * 0755-351512
 * @author Administrator
 * */public class Phone {private String qno;private String number;public String getQno() {return qno;
    }public void setQno(String qno) {this.qno = qno;
    }public String getNumber() {return number;
    }public void setNumber(String number) {this.number = number;
    }
    
}

//Message Converter Pour implémenter une classe abstraite AbstractHttpMessageConverter

package com.crazy.goods.tools;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import org.springframework.http.HttpInputMessage;import org.springframework.http.HttpOutputMessage;import org.springframework.http.converter.AbstractHttpMessageConverter;import org.springframework.http.converter.HttpMessageNotReadableException;import org.springframework.http.converter.HttpMessageNotWritableException;public class MyMessageConvertor extends AbstractHttpMessageConverter<Phone> {/** * 将请求头数据转换成Phone     */
    @Overrideprotected Phone readInternal(Class<? extends Phone> arg0,
            HttpInputMessage msg) throws IOException,
            HttpMessageNotReadableException {//参数必须使用post提交必须在body中InputStream is=msg.getBody();
        BufferedReader br=new BufferedReader(new InputStreamReader(is));
        String param=br.readLine();
        String phone=param.split("=")[1];
        Phone phoneObj=new Phone();
        phoneObj.setQno(phone.split("-")[0]);
        phoneObj.setNumber(phone.split("-")[1]);return phoneObj;
    }/** * 当前的转换器支持转换的类     */@Overrideprotected boolean supports(Class<?> arg0) {if(arg0==Phone.class){return true;
        }return false;
    }/** * 用于将返回的对象转换成字符串显示在网页     */@Overrideprotected void writeInternal(Phone phone, HttpOutputMessage arg1)throws IOException, HttpMessageNotWritableException {
        String p=phone.getQno()+"-"+phone.getNumber();
        arg1.getBody().write(p.getBytes("UTF-8"));
    }

}

//springmvc . xml Pour configurer le convertisseur bean: message, seule la méthode de soumission post sera interceptée par le convertisseur

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/context http://www.springframework.org/schema/tx http://www.springframework.org/schema/aop http://www.springframework.org/schema/mvc ">
    <!--springmvc只能扫描控制层  -->
    <context:component-scan base-package="com.crazy.goods">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
    </context:component-scan>
    
    <!--消息转换器 必须使用post提交   -->
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="com.crazy.goods.tools.MyMessageConvertor">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                          <value>application/x-www-form-urlencoded</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
</beans>

test de servlet

<br>

package com.crazy.goods.servlet;

<br>

importer java.io.IOException;

<br>

importer javax.servlet.ServletException;<br>importer javax.servlet.annotation. WebServlet;<br>importer javax.servlet.http.HttpServlet;<br>importer javax.servlet.http.HttpServletRequest;<br>importer javax.servlet.http.HttpServletResponse;

<br>

importer org. springframework.stereotype.Controller;<br>importer org.springframework.web.bind.annotation.PathVariable;<br>importer org.springframework.web.bind.annotation.RequestBody;<br>importer org.springframework.web.bind. annotation.RequestMapping;<br>import org.springframework.web.bind.annotation.RequestMethod;<br>import org.springframework.web.bind.annotation.ResponseBody;

<br>

import com.crazy. marchandises.tools.Phone;

<br>

/**<br> * @author Administrator<br> * Créé le 1er juillet 2017 à 15:11:27 <br>*/<br>@Controller<br>classe publique ReservePageServelt {

<br>

// /**<br>// * forward : forward <br>// * redirect : redirect <br>// * @param req<br>// * @param resp<br>// * @return<br>// * @throws ServletException<br>// * @throws IOException<br>//*/<br>// @RequestMapping(value="/add",method={RequestMethod.GET})<br>// public String doGet(HttpServletRequest req, HttpServletResponse resp/*,@PathVariable("testid" ) String testid*/) lance ServletException, IOException {<br>// req.getRequestDispatcher("/reversegood.jsp").forward(req, resp);<br>// return "/reversegood.jsp";<br>// resp.getWriter().print(testid);<br>// }<br><br><br> //Idée de convertisseur de message, <br><br> //Le principe est de convertir la requête body ou Les données de l'en-tête de la requête sont converties en paramètres de la méthode d'action, et le contenu de la valeur de retour de la méthode est converti en en-tête de réponse <br> //Lorsque l'on accède au chemin de l'url, l'annotation @RequestBody est utilisé.Cette annotation identifie que cette classe doit être traitée par le convertisseur de message, le convertisseur de message sera lu dans le fichier springmvcxml, puis entrera la méthode supports <br> // Détermine si cette classe est prise en charge par le spécifié. convertisseur. S'il est pris en charge, appelez la méthode readInternal, coupez, puis ajoutez la valeur Passée dans l'objet, une fois le traitement terminé dans l'objet, writeInternal sera appelé pour le convertir en en-tête de réponse<br> @RequestMapping(value ="/add")<br> @ResponseBody<br> public Phone messageConvertor( @RequestBody Phone phone,HttpServletResponse réponse) {<br> System.out.println(phone.getQno()+phone.getNumber());<br>retour de téléphone;<br><br>><br><br>}

 <br>

Résumé : Le principe du convertisseur de message est de personnaliser la demande données du corps en paramètres formels (objets), puis convertissez le contenu de la valeur de retour de la méthode en en-tête de réponse

Étapes :

Lorsque vous accédez au chemin de l'URL, vous verrez le @RequestBody L'annotation est utilisée.Cette annotation indique que cette classe doit être traitée par le convertisseur de message, et le convertisseur de message sera lu dans le fichier springmvcxml. Entrez ensuite la méthode supports <br> pour déterminer si cette classe est prise en charge par le convertisseur spécifié. . S'il est pris en charge, appelez la méthode readInternal, effectuez la découpe, puis transférez la valeur à l'objet

Une fois le traitement terminé en objet, WriteInternal sera appelé pour convertir en en-tête de réponse

.

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