问个SpringMVC的问题
我自己写了一个字符串到日期类型的转换器,把从表单提交的字符串日期转化成java的date类型,当转化失败的时候抛出异常。
但是当我测试的时候发现,转化失败的时候并没有抛出任何异常,SpringMVC直接给我返回一个400错误页面。
现在我想当我数据转化失败的时候得到这个错误,然后进行处理,再返回给用户一个友好的提示,这时候应该怎么做呢?
代码如下:

这是控制器的代码

这是VO对象代码

这是转化器的代码

这是返回的400错误页面

这是控制台的信息,可以看到这个时候并没有抛出任何异常
------解决方案--------------------

那我没啥办法,我之前用这框架做文件上传时候也是,参数同时带文件和对象,结果不能实例化为对象也是400错误,当时没办法只能分开处理了
------解决方案--------------------楼上一帮不懂瞎指挥。按照我的思路来:
出400错误应该是配置生效了,但是格式错误抛了个异常,这个异常没有被捕获,还没有进入控制层方法体中,根本不管返回值什么事,再说你这样返回void也是没问题的。
这是正确的配置代码:
<mvc:annotation-driven conversion-service="conversionService" />
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<!-- 控制层参数支持Date类型 -->
<bean class="***.***.***.DateConverter" />
</set>
</property>
</bean>
然后你把传入正确的日期格式:yyyy-MM-dd , 应该就没有问题了;
但是建议你converter这样写:
public class DateConverter implements Converter<String, Date> {
/** date format 格式*/
private static final String[] PATTERNS = {"yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd", "HH:mm:ss"};
@Override
public Date convert(String source) {
if(!StringUtil.isNvl(source)) {
try {
return DateUtils.parseDateStrictly(source, PATTERNS);
} catch (ParseException e) {
//异常时参数绑定失败
}
}
return null;
}
}
日期格式支持多种,需要引入common-lang3jar包。 不要抛异常出去,当发现格式不对时,返回null就好了,由使用者自己去调整自己传入的data格式。
如果抛异常也行,定义个exceptionHandler 处理。 实现spring的HandlerExceptionResolver 并定义bean由spring初始化即可。
然后你就可以在resolveException方法中看到你抛出的
RuntimeException