您的位置:首页 > 编程语言 > Java开发

开发记录————spring mvc 获取页面数据

2016-10-23 16:29 218 查看
本周开发终于回到了spring mvc的框架,然而我拿到手的时候居然已经忘了spring mvc是啥了,从某种意义上来说我确实可以反省下了,不过大半年没写spring就已经忘的差不多了。嘛,但这并不影响我今天的记录,毕竟我记录只是一个很小的部分。但还是要注意要好好的再看看spring mvc的开发记录,好好的再回忆和强化下自己的技术。
这次主要是修改一个bug,提交表单的时候出现了400的一个报错。我们知道,spring mvc的页面数据一般使用from表单提交,后台直接用实体接受,然后传入service层开始进行事物运算。可是如果在实体里出现了如特殊类型的字段,非空字段但却允许页面存在空值,类似于不少这样的情况,那我们该怎么做呢?
方法一,使用spring mvc拦截器。spring mvc允许我们自己写拦截器,利用这个机制,我们可以在spring mvc的控制文件,就是在后缀为.xml的文件里添加配置,然后拦截这些特殊的数据,然后进入自己写好的util工具里进行处理。
下面就那这次的BUG举个例子:
这次是由前台传入一个数据为空的timestamp类型的字段,但应为本身这个类型的字段不能为空,于是在提交表单时直接报400错误,都没有进入后台就被拦截了。于是我们可以用方法一处理
首先在util里写一个处理此问题的工具类


public class TimestampConverter implements Converter<String, Timestamp>{

@Override
public Timestamp convert(String timeStr) {

Timestamp date=null;
if(StringUtils.checkNotEmpty(timeStr)){
long time=Long.valueOf(timeStr);
date=new Timestamp(time);
}
return t;
}
}


然后在配置文件中添加


<mvc:annotation-driven  conversion-service="conversionService"/>
<bean id="conversionService"        class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="xxx.xxx.xxx.utils.TimestampConverter"></bean><!-- 此处填写自己的工具类路劲 -->
</list>
</property>
</bean>


——————(方法参考开源中国网友,感谢小小懒羊羊分享此方法,原址http://www.oschina.net/code/snippet_2438265_52717

于是这就可以解决传值的问题了。
但是我是改BUG,虽然这样做没有问题,但是最为一个菜鸟我还没有能理解什么是拦截器,我要怎么添加拦截器(虽然我觉得这是不可能的)。又或者因为某些原因我无法修改拦截器的内容,又或者我只要改这一个地方,加拦截器太烦了。于是,方法二:利用spring mvc 的request方法直接获取页面数据


@RepusetMapping(value="add",method=RequestMethed.POST)
@ReponseBody
public Return add(Model model, Request request){
String time = request.getParamter("time");
//以下是原controller
Return rs = Model.add(model,LoginSessionHelper.getCurrentUser(request),time);//传入service层进行处理
return rs;
}


方法二的好处在于方便,直接获取页面数据再进行自己处理,但如果面对大量的地方需要修改,还是使用方法一老老实实的写拦截器,不要搞这些投机取巧的方法。但我想说的是,在有些情况下,当你无法实现一个功能时不妨换个方法思考,毕竟对于像我一样的菜鸟来说,完成功能才是首要考虑条件。(写博客的时候controller这个单词我查了三遍你敢信?-_-|||)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: