Spring MVC 类型转换(Converter)
Spring MVC框架的Converter<S,T>是一个可以将一种数据类型转换成另一种数据类型的接口,这里S表示源类型,T表示目标类型。开发实际应用使用框架内置的类型转换器基本上就足够了,但有时需要编写具有特定功能的类型转换器。
1.内置的类型转换器
类型转换是在视图与控制器相互传递数据时发生的,Spring MVC框架对基本类型(例如:int、long、float、double、boolean以及char等)已经做好了基本类型转换。
package controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value="/goods")
public class GoodsController {
@RequestMapping(value="/addGoods")
public String addGoods(String goodsname,double goodsprice,int goodsnumber,HttpServletRequest request) {
double total = goodsprice*goodsnumber;
request.setAttribute("total", total);
return "success";
}
}
在使用内置转换器时,请求参数输入值已接收参数类型要兼容,否则会报400错误。请求参数类型与接受参数类型不兼容可以通过校验解决。
2.自定义类型转换器
1)创建实体类
2)创建控制器类
@RequestMapping(value="/my")
public class ConverterController(){
@RequestMapping(value="/converter")
/*使用@RequestParam("goods")接收请求参数
然后调用自定义类型转换器GoodConverter将字符串转换为GoodModel的对象gm
*/
public String myConverter(@RequestPara("goods") GoodsModel gm,Model model){
model.addAttribute("goods",gm);
return "showGoods";
}
}
3)创建自定义类型转换器
自定义类型转换器需要实现Converter<S,T>接口,重写convert()接口方法。convert(S)方法的功能是将源数据类型转换为目标数据类型T。
4)注册类型转换器
在springmvc-servlet.xml中注册自定义类型转换器
<bean id="conversionService" class="org.springframework.context.support.ConversionSreviceFactoryBean">
<property name="converters">
<list>
<bean class="converter.GoodsConverter"/>
</list>
</property>
</bean>
<mvc:annotation-driven conversion-service="conversionService"/>
5)创建相关视图