springMVC 属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts2(一般老项目使用)等。
返回结果为Bean对象,name又如何转换成JSON对象输出? Controller层 1 2 3 4 5 6 7 8 9 @RequestMapping(value = "/showJson") @ResponseBody public String showJson () { UserMessage um = new UserMessage (); um.setError("exception" ); um.setMessage("异常" ); return JSON.toJSONString(um); }
在上述代码中,通过
指定请求的URL。 通过
来进行处理结果的输出。 在方法体内,通过um对象将um转换成JSON格式的字符串。
解决JSON数据传递的中文乱码问题 局部指定的编码集,如上述代码注释的部分 1 produces = {"application/json;charset=utf-8"}
在sringmvc-servlet.xml 中解决JSON数据传递的中文乱码问题: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <mvc:annotation-driven > <mvc:message-converters > <bean class ="org.springframework.http.converter.StringHttpMessageConverter" > <constructor-arg value ="utf-8" /> </bean > <bean class ="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter" > <property name ="supportedMediaTypes" > <list > <value > application/json</value > </list > </property > </bean > </mvc:message-converters > </mvc:annotation-driven >
解决JSON数据传递的日期格式问题 在SpringMVC中使用@ResponseBody返回JSON数据是,日期默认显示为时间戳。如(512323200000),我们需要把他转换成具有可读性的 ‘yyyy-MM-dd’ 日期格式(如1986-02-28)具体的解决方案有两种:
1) 注解方式 在属性上加
1 @JSONfield(format="yyyy-MM-dd")
2)配置FastJosn消息 转换器————FastJsonHttpMessageConverter: 此方式默认格式为 yyyy-MM-dd HH:mm:ss
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <mvc:annotation-driven > <mvc:message-converters > <bean class ="org.springframework.http.converter.StringHttpMessageConverter" > <constructor-arg value ="utf-8" /> </bean > <bean class ="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter" > <property name ="supportedMediaTypes" > <list > <value > application/json</value > </list > </property > <property name ="features" > <list > <value > WriteDateUseDateFormat</value > </list > </property > </bean > </mvc:message-converters > </mvc:annotation-driven >
单独配置JSP解析器 1 2 3 4 <bean class ="org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name ="prefix" value ="/WEB-INF/jsp/" /> <property name ="suffix" value =".jsp" /> </bean >
多视图解析器 导入XML生成的jar包 1 2 3 4 5 <dependency > <groupId > org.springframework</groupId > <artifactId > spring-oxm</artifactId > <version > 4.3.12.RELEASE</version > </dependency >
配置springmvc-servlet 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 <bean class ="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" > <property name ="defaultViews" > <list > <bean class ="com.alibaba.fastjson.support.spring.FastJsonJsonView" > <property name ="charset" value ="UTF-8" /> </bean > <bean class ="org.springframework.web.servlet.view.xml.MarshallingView" > <constructor-arg > <bean class ="org.springframework.oxm.jaxb.Jaxb2Marshaller" > <property name ="classesToBeBound" > <list > <value > com.entity.SmbmsUser</value > <value > com.entity.SmbmsProvider</value > <value > com.entity.SmbmsBill</value > <value > com.entity.SmbmsRole</value > <value > com.entity.SmbmsAddress</value > </list > </property > </bean > </constructor-arg > </bean > </list > </property > <property name ="viewResolvers" > <list > <bean class ="org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name ="prefix" value ="/WEB-INF/jsp/" /> <property name ="suffix" value =".jsp" /> </bean > </list > </property > </bean >
自定义类型转换器 单个格式转换 1 2 3 4 5 6 7 8 9 <bean name ="conversionService" class ="org.springframework.context.support.ConversionServiceFactoryBean" > <property name ="converters" > <set > <bean class ="com.converter.DataConverter" p:dataPatter ="yyyy-MM-dd" /> </set > </property > </bean > <mvc:annotation-driven conversion-service ="conversionService" />
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class DataConverter implements Converter <String,Date> { private String dataPatter; public void setDataPatter (String dataPatter) { this .dataPatter = dataPatter; } public Date convert (String s) { Date data = null ; try { data = new SimpleDateFormat (dataPatter).parse(s); } catch (ParseException e) { e.printStackTrace(); } return data; } }
多个格式转换 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <bean name ="conversionService" class ="org.springframework.context.support.ConversionServiceFactoryBean" > <property name ="converters" > <set > <bean class ="com.converter.DataConverters" > <property name ="dataPatters" > <array > <value > yyyy-MM-dd</value > <value > yyyy/MM/dd</value > <value > yyyy MM dd</value > </array > </property > </bean > </set > </property > </bean > <mvc:annotation-driven conversion-service ="conversionService" />
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 public class DataConverters implements Converter <String, Date> { private String[] dataPatters; public Date convert (String s) { Date date = null ; for (String dataPatter : dataPatters) { try { date = new SimpleDateFormat (dataPatter).parse(s); break ; } catch (ParseException e) { System.out.println(e.getMessage()); continue ; } } return date; } public void setDataPatters (String[] dataPatters) { this .dataPatters = dataPatters; } }
拦截器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <mvc:interceptors > <mvc:interceptor > <mvc:mapping path ="/**" /> <mvc:exclude-mapping path ="/login" /> <mvc:exclude-mapping path ="/css/**" /> <mvc:exclude-mapping path ="/images/**" /> <mvc:exclude-mapping path ="/js/**" /> <bean class ="com.interceptor.MyInterceptor" /> </mvc:interceptor > </mvc:interceptors >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MyInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle (HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("one" ); Object userSession = request.getSession().getAttribute("userSession" ); if (null == userSession) { response.sendRedirect("/login" ); return false ; } return super .preHandle(request, response, handler); } @Override public void postHandle (HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("two" ); super .postHandle(request, response, handler, modelAndView); } @Override public void afterCompletion (HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("three" ); super .afterCompletion(request, response, handler, ex); } }
示例下载 密码: ksqj