一、类型转换器
SpringMVC可以进行类型转换,默认已经实现了很多类型转换。但若要自定义一个类型转换器,则需:
1、实现Converter接口:Coverter<S,T>
S:指需要转换的类型
T:转换成的类型
以字符串转换日期为例
使用SimpleDateFormat:
public Date convert(String s) {
if(s==null){
throw new RuntimeException("请传入时间数据");
}
DateFormat af=new SimpleDateFormat("yyyy-MM-dd");
try {
Date date=af.parse(s);
return date;
} catch (ParseException e) {
throw new RuntimeException("程序出错");
}
}
2、转换函数完成后需要配置该转换类方可生效:
使用标签配置类型转换器、关键字为ConversionServiceFactoryBean
<!--配置类型转换器-->
<bean id="typeTransform" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.lijie.utils.typeTransform"></bean>
</set>
</property>
</bean>
3、配置完类型转换器后,需要开启该配置,使之生效。
在开启springMVC框架中,使用conversion-service关键字
<mvc:annotation-driven conversion-service="typeTransform"/>
二、响应的数据和结果视图
1、控制器返回一个字符串
将控制器中要返回的数据存入到ModelMap,ModelMap的底层会将数据存入到request域中,前端使用EL语句或request.getAttribute方法即可调用该数据
2、控制器返回void
有两种情况:
1、默认返回一个值
2、控制器获得HttpServletResquest和HttpServletResponse对象,在控制器中进行请求转发或重定向。
3、直接响应:response.getWriter.println()
3、关键字实现转发与重定向
使用关键字时,无需使用到视图解析器。
4、控制器返回ModelAndView
ModelAndView是SpringMVC框架提供的一个对象,该对象可以用作控制器方法的返回值
三、ResponseBody响应json数据
由于配置了前端控制器,前端页面中的静态资源,控制器拦截。因此需要在Spring的配置文件中进行配置。使之取消拦截部分请求。
关键标签:mvc:resources
<!--前端控制器不拦截的对象-->
<mvc:resources location="/js/" mapping="/js/**" ></mvc:resources> <!--不拦截js-->
<mvc:resources location="/css/" mapping="/css/**" ></mvc:resources> <!--不拦截css-->
<mvc:resources location="/images/" mapping="/images/**" ></mvc:resources> <!--不拦截图片-->
1、前端发送一个json数据
<script>
$(function() {
$("#ajax").click(function () {
$.ajax({
url:"user/testAjax",
type:"post",
contentType:"application/json;charset=UTF-8",
dataType:"json",
data:'{"username":"李杰","age":"20"}',
success:function (data) {
}
});
});
});
</script>
后端接收到:{“username”:“李杰”,“age”:“20”}这一个json对象。
若使该json对象自动封装成一个属性值为username=李杰,age=20的JavaBean(user)对象,则需要引入SpringMVC提供的一组jar包:jackson
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
引入jar包后,在控制器参数列表中输入:@RequestBody User user 即可使json数据封装成一个JavaBean对象。
@RequestMapping("/testAjax")
public void testAjax(@RequestBody User user){
System.out.println(user);
System.out.println("执行了");
}
2、后端响应一个json数据
后端响应json对象时,以往需要使用response和输出流的形式,将JavaBean转换成Json对象。而在SpringMVC中,使用@responseBody注解即可转换成Json对象。
@RequestMapping("/testAjax")
public @ResponseBody User testAjax(@RequestBody User user){
System.out.println(user);
System.out.println("执行了");
return user;
}
后端响应后,Ajax即可得到JavaBean的Json对象。