最近的项目没有用到这个,先把自己自学跑通的例子先帖出来,供自己以后参考吧!

如有不对地方望指出!

一、自定义类实现AbstractHttpMessageConverter

  1. package com.dzf.converter;
  2.  
  3. import java.io.IOException;
  4. import java.nio.charset.Charset;
  5.  
  6. import org.springframework.http.HttpInputMessage;
  7. import org.springframework.http.HttpOutputMessage;
  8. import org.springframework.http.MediaType;
  9. import org.springframework.http.converter.AbstractHttpMessageConverter;
  10. import org.springframework.http.converter.HttpMessageNotReadableException;
  11. import org.springframework.http.converter.HttpMessageNotWritableException;
  12. import org.springframework.util.StreamUtils;
  13.  
  14. import com.alibaba.fastjson.JSONObject;
  15. import com.dzf.vo.ResultInfo;
  16. /**
  17. * 自定义消息转换器
  18. * @author dingzf
  19. * @date 2018年1月20日
  20. * @time 19:26:39
  21. */
  22. public class MyMessageConverter extends AbstractHttpMessageConverter<ResultInfo> {
  23.  
  24. public MyMessageConverter(){
  25. super(Charset.forName("utf-8"),new MediaType("application","x-result"));//application/x-result 自己定义的媒体数据类型
  26. }
  27.  
  28. //所映射的model
  29. @Override
  30. protected boolean supports(Class<?> clazz) {
  31. return ResultInfo.class.isAssignableFrom(clazz);
  32. }
  33.  
  34. @Override
  35. protected ResultInfo readInternal(Class<? extends ResultInfo> clazz, HttpInputMessage inputMessage)
  36. throws IOException, HttpMessageNotReadableException {
  37. String copyToString = StreamUtils.copyToString(inputMessage.getBody(), Charset.forName("utf-8"));//传输为json类型的数据
  38. ResultInfo result = (ResultInfo)JSONObject.parse(copyToString);//转换为自己想要的数据类型 按需编写
  39. return result;
  40. }
  41.  
  42. @Override
  43. protected void writeInternal(ResultInfo t, HttpOutputMessage outputMessage)
  44. throws IOException, HttpMessageNotWritableException {
  45. String str = t.getCode()+"-"+t.getDesc();//返回到前台的数据
  46. outputMessage.getBody().write(str.getBytes());
  47. }
  48.  
  49. }

二、在springmvc的配置文件中加入我们自定义的消息转换器

  1. <!--
  2. 打开springmvc的注解模式
  3. mvc 请求映射 处理器与适配器配置 -->
  4. <mvc:annotation-driven >
  5. <mvc:message-converters register-defaults="true">
  6. <bean class="org.springframework.http.converter.StringHttpMessageConverter" ><!--字符串转换器-->
  7. <property name = "supportedMediaTypes">
  8. <list>
  9. <value>application/json;charset=utf-8</value>
  10. <value>text/html;charset=utf-8</value>
  11. </list>
  12. </property>
  13. </bean>
  14. <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /><!--json转换器-->
  15. <bean class ="com.dzf.converter.MyMessageConverter"> <!--自己定义的消息转换器-->
  16. <property name = "supportedMediaTypes">
  17. <list>
  18. <value>application/json;charset=utf-8</value>
  19. <value>application/x-result;charset=utf-8</value>
  20. <value>text/html;charset=utf-8</value>
  21. </list>
  22. </property>
  23. </bean>
  24. </mvc:message-converters>
  25. </mvc:annotation-driven>

三、在前台指定发送数据的格式

  1. function test6(){
  2. $.ajax({
  3. type:'post',
  4. url:'json/test6',
  5. contentType:'application/x-result',
  6. data:{code:"200",desc:"我是丁振锋"},
  7. success:function(text){
  8. alert(text);
  9. },
  10. error:function(data){
  11. alert("后台异常!")
  12. },
  13. asyn:false,
  14. cache:false
  15. });
  16. }

四、服务器端指定返回的数据格式

  1. /**
  2. * 测试自定义消息转换器
  3. * 在请求头上必须加上produces="application/x-result;charset=utf-8"
  4. * @param request
  5. * @param response
  6. * @return
  7. */
  8. @RequestMapping(value="/test6",produces="application/x-result;charset=utf-8")
  9. @ResponseBody
  10. public ResultInfo test6(HttpServletRequest request,HttpServletResponse response){
  11. ResultInfo result = new ResultInfo();
  12. result.setCode("200");
  13. result.setDesc("请求成功!");
  14. Map<String,String> map = new HashMap<String,String>();
  15. map.put("name", "红霞");
  16. map.put("age","22");
  17. result.setData(map);
  18. return result;
  19. }

到这里,基本上就结束了!

注意点:

1.请求头的contentType必须要设值你自定义的数据格式

2.返回数据格式如果需要使用你自定义的数据格式,加上路由设置。即:produces="application/x-result;charset=utf-8"

springmvc-自定义消息转换器的更多相关文章

  1. springmvc 类型转换器 自定义类型转换器

    自定义类型转换器的步骤: 1.定义类型转换器 2.类型转换器的注册(在springmvc配置文件处理) 来解决多种日期格式的问题: springmvc 类型转换器 表单数据填错后返回表单页面(接上面的 ...

  2. JavaEE开发之SpringMVC中的自定义消息转换器与文件上传

    上篇博客我们详细的聊了<JavaEE开发之SpringMVC中的静态资源映射及服务器推送技术>,本篇博客依然是JavaEE开发中的内容,我们就来聊一下SpringMVC中的自定义消息转发器 ...

  3. SpringMVC类型转换器、属性编辑器

    对于MVC框架,参数绑定一直觉得是很神奇很方便的一个东西,在参数绑定的过程中利用了属性编辑器.类型转换器 参数绑定流程 参数绑定:把请求中的数据,转化成指定类型的对象,交给处理请求的方法 请求进入到D ...

  4. SpringMVC——消息转换器HttpMessageConverter(转)

    文章转自http://blog.csdn.net/cq1982/article/details/44101293 概述 在SpringMVC中,可以使用@RequestBody和@ResponseBo ...

  5. SpringBoot添加自定义消息转换器

    首先我们需要明白一个概念:springboot中很多配置都是使用了条件注解进行判断一个配置或者引入的类是否在容器中存在,如果存在会如何,如果不存在会如何. 也就是说,有些配置会在springboot中 ...

  6. springboot自定义消息转换器HttpMessageConverter

    在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换,底层这种灵活的消息转换机制就是利用HttpMessageCo ...

  7. springmvc 类型转换器 数据回显及提示信息

    处理器的写法: 类型转换器的写法: 类型转换器在springmvc.xml中的配置如下: index.jsp的写法:

  8. springmvc 日期转换器

    package com.xxx.common.controller.converter; import org.joda.time.DateTime; import org.joda.time.for ...

  9. Spring MVC自定义消息转换器(可解决Long类型数据传入前端精度丢失的问题)

    1.前言 对于Long 类型的数据,如果我们在Controller层通过@ResponseBody将返回数据自动转换成json时,不做任何处理,而直接传给前端的话,在Long长度大于17位时会出现精度 ...

  10. springboot自定义消息转换器HttpMessageConverter Spring Boot - 使用Gson替换Jackson

    Jackson一直是springframework默认的json库,从4.1开始,springframework支持通过配置GsonHttpMessageConverter的方式使用Gson. 在典型 ...

随机推荐

  1. 2015 湘潭大学程序设计比赛(Internet)--D题-最小的数

    最小的数 Accepted : 47   Submit : 276 Time Limit : 1000 MS   Memory Limit : 65536 KB 题目描述 给你一个n位数,每次操作可以 ...

  2. 解决SQL Server管理器无法连接远程数据库的问题(转)

    add by zhj: 本文最后那个数据库别名没搞明白,在我的测试中没有建别名,是可以的.远程登陆时,服务器名称: 服务器IP,端口号 (如223.42.155.248,52134 如果是默认端口号1 ...

  3. mysql 数据类型 目录

    mysql 数据类型 mysql 整数类型 数值类型 tinyint mysql int 整数类型 解释显示宽度 和 存储宽度 mysql float 浮点型 mysql 日期类型 mysql 字符串 ...

  4. python float()

    1.函数功能将一个数值或者字符转换成浮点型数值 >>> a = 12345 >>> amount = float(a) >>> print(amo ...

  5. android 6.0之后动态获取权限

    Android 6.0 动态权限申请   1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限 ...

  6. 不需要更多JS框架了

    现在,JavaScript框架已成为Web项目开发不可或缺的一部分.那是因为很长一段时间以来,各种浏览器之间有很大的差别,人们不得不编写框架对此进行屏蔽.问题在于,各种浏览器甚至在基本问题上都难以取得 ...

  7. 非受限联合体 - 现代C++新特性总结

    非受限联合体 非受限联合体:C++98中并不是所有数据类型都能够成为union的数据成员,不允许联合体拥有非POD(Plain Old Data).静态或引用类型的成员. C++11中取消了联合体对于 ...

  8. PAT 1070 Mooncake[一般]

    1070 Mooncake (25)(25 分) Mooncake is a Chinese bakery product traditionally eaten during the Mid-Aut ...

  9. 两个list对应元素相加

    a=[1,2,3] b=[4,5,6] 现将list a与 list b按位相加,其结果为[5,7,9] 方法一: c=[a[i]+b[i] for i in range(min(len(a),len ...

  10. iOS UI基础-5.0 QQ框架(Storyboard)

    1.拉入TabBarController和4个Navigation 2.TabBarController关联Navigation 3.设置消息,拉入一个Button,设置背影 4.联系人,拉入一个Se ...