不牵扯源码的显式的作用
- 在使用interceptor时,显式的作用。
这是不配置<mvc:annotation-driven/>标签时的public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler)的第三个参数
这是在配置<mvc:annotation-driven />标签时的public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler)的第三个参数
粗略总结:此标签会加载一些spring的初始化类,来进行初始化。(分析源码时,再详细解)
错误: 在此处情景下,
@RequestMapping("/vm") @ResponseBody public JsonResult vm(HttpServletRequest request,HttpServletResponse response){ JsonResult jr =new JsonResult(); System.out.println("systemController/vm...."); return jr; }
public class JsonResult { private boolean success = true; private Map<String ,Object> results = new HashMap<String,Object>(); private Long page =1L; private Long total ; //get set方法省略 }
仅仅配置<mvc:annotation-driven></mvc:annotation-driven>会出现下图错误
提示没有对应的converter,至于为什么,有待分析源码给出准确答案。
解决办法:配置<mvc:message-converters></mvc:message-converters>子标签,引入阿里fastjson支持,不使用spring默认的Jackson。完整配置如下:
<mvc:annotation-driven> <mvc:message-converters> <!-- 配置fastjson代替原来jackson的支持 --> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>text/json;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>