项目总结-基于SpringMVC的微信公众号开发
来源:互联网 发布:windows找不到chrome 编辑:程序博客网 时间:2024/06/10 05:01
最近一个月做的项目是一个微信公众号服务端开发,使用SpringMVC开发的。总结下这段时间使用SpringMVC碰到的问题,其实都是这个框架的基础,只是在碰到问题并解决之后才恍然大悟,原来这些技术该这么使用,原来自己生疏了这么多东西。
1 关于iBatis配置SqlMap映射Java Bean
数据表的字段和Java Bean的属性一致,则iBatis会自动根据resultClass完成查询结果到Java类的映射的。但是有一点需要注意,iBatis映射类的属性时是以单词为单位的,所以Java类的属性也应该遵循这个规则。一张表定义了一个KEYWORD的字段,对应的Java类属性名是keyWord,后来查询映射时抛出异常说KEYWORD没有可写的方法。很纳闷,后来有道一查发现keyword是一个单词,导致映射出错。
2 iBatis的resultMap定义,如果resultMap的class是一个类,需要对类的每个属性都定义映射规则,没有定义的属性则为null。本来我以为如果不指定,iBatis会自动映射的,今天测试发现查询返回的类属性值都为空,才发现想偷懒是不行的。
贴出代码:
<resultMap id="resourceDetail" class="WexinResource"><result property="newsMsgs" column="ID" select="wexinNewsMsg.queryByResourceId" /><result property="keyword" column="KEYWORD"/><result property="type" column="TYPE"/><result property="title" column="TITLE"/><result property="description" column="DESCRIPTION"/><result property="mediaId" column="MEDIAID"/><result property="localUrl" column="LOCALURL"/></resultMap>
当resultMap对应的类有关联属性时,使用select,会将对应列作为参数传递给select属性指定的sql,该SQL的执行结果赋给该关联属性。同时如果使用了lazy-load,一般只有在访问该属性时,才会执行这个SQL的。
3 ResponseBody注解返回文本时中文乱码问题
使用ResponseBody注解时,如果Action返回类型为String,则SpringMVC会将该String直接返回给客户端;如果是Java对象,则会转换成Json返回给客户端。如果Action方法没有使用该注解,而返回类型是String,则SpringMVC则会将该返回值按照ViewResolver的规则来拼装返回页面。
@RequestMapping(value="/resourcelist")public String toResourceList(){return "/weixin/resource";} @RequestMapping(value="/fanslist")@ResponseBodypublic ModelAndView toFansList(){ModelAndView mv = new ModelAndView("/weixin/getfanslist");return mv;}
以上是两种不同的定向到.jsp页面的方法,注解与非注解的方式。如果ResponseBody是普通的Java对象,而且碰巧有中文的话,很可能会出现中文乱码问题,解决办法有两种。一个是在Action上使用注解produces = {"text/xml;charset=UTF-8"},另一种是在SpringMVC的配置文件中设置如下配置,需要注意的是该配置在<mvc:annotation-driven/>的情况下会失效。需要注掉注解驱动的配置才行,而且一旦设置下面的配置之后,客户端 的Accet-CharSet属性将会出现一大堆的编码格式,因而乱码问题可以避免。
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.StringHttpMessageConverter" > <property name = "supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> </list> </property> </bean> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name = "supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> </list> </property> </bean> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> </list> </property> </bean>
4 SpringMvc文件上传问题
使用SpringMVC上传文件时,必须通过form表单提交,且设置enctype="multipart/form-data",method="POST",file类型的表单的name属性必须跟Action方法的MultipartFile参数名称一致。而且很奇怪的现象是如果没有选择文件时,提交的Action的该文件字段对象是非null的,只不过该对象的isEmpty是true。文件上传的方法如果使用IOUtils的拷贝方法,会上传失败,但是Spring框架的FileUtils.copyInputStreamToFile方法可以正常完成拷贝。
总结:编码是个细致活,一不小心,就被bug盯上了。变更有风险,修改需谨慎,拷贝也同样不是件让人省心的事情。总之,路漫漫呐!
- 项目总结-基于SpringMVC的微信公众号开发
- 基于aiohttp web框架的微信公众号开发(项目)
- 基于Django的微信公众号开发(3) -- 通过微信公众号开发者认证
- 基于python的微信公众号开发
- 基于play Framework 2.2的微信公众号开发
- 基于JAVA的微信公众号开发【学习一】
- 基于JAVA的微信公众号开发【学习二】
- 微信公众号项目总结
- 微信公众号开发的一些总结
- 微信公众号开发的几点总结
- 微信公众号开发 总结
- 微信公众号开发--简单总结
- 微信公众号支付开发总结
- 微信公众号开发总结
- java开发微信公众号(SpringMVC)1-简述
- 基于java的微信公众平台开发视频教程
- 微信公众平台开发:基础篇(微信公众号能够发送的各类图文信息总结)
- 如何基于OpenShift进行微信公众号开发
- 第九周大星小星
- 第12周项目3(1)-阶乘
- 微信客户端内部推荐项目总结
- 只有lua才能编译出小于200K的代码吗?NO! Python 也可以。
- [设计模式]-适配器模式及其扩展
- 项目总结-基于SpringMVC的微信公众号开发
- Android的消息推送系列之消息推送原理
- 织梦DEDECMS有限的编程扩展runphp='yes'
- PPT转PDF,提示无法找到打印机
- buffer pool latch和cache buffers chains latch
- 树形DP +01背包(HDU 1011)
- 进程通信学习笔记(System V消息队列)
- sscanf,sprintf,fscanf,fprintf 系列函数的用法小结
- Java多线程的调度策略