论坛首页 Java企业应用论坛

Spring3 Web MVC下的数据格式化(第二篇)——《跟我学Spring3 Web MVC》抢先看

浏览 16099 次
精华帖 (9) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2012-08-26  
depravedangel 写道
可以的,我调试打断点都没进来,打印输出语句也没输出,代码如下:
public class DateConverter implements  Converter<String, Date> {

	public Date convert(String source) {  
            System.out.println(source);
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
            dateFormat.setLenient(false);  
            try {  
                return dateFormat.parse(source);  
            } catch (ParseException e) {  
                e.printStackTrace();  
        }         
        return null;  
    }  
}

还有别的可能情况么,我调试了下,代码走的RequestMappingHandlerMapping里面去获取值,感觉这个配置根本就没作用


你直接使用 @DateTimeFormat(pattern="yyyy-MM-dd") 即可 不用自定义的
0 请登录后投票
   发表时间:2012-08-26  
jinnianshilongnian 写道


你直接使用 @DateTimeFormat(pattern="yyyy-MM-dd") 即可 不用自定义的


我的需求要实现多种日期格式注入,这种注解只能注入一种格式。

我看到一篇文章里面提到这些:
引用

Servlet中的输入参数为都是string类型,而spring mvc通过data bind机制将这些string 类型的输入参数转换为相应的command object(根据view和controller之间传输数据的具体逻辑,也可称为model attributes, domain model objects)。在这个转换过程中,spring实际是先利用java.beans.PropertyEditor中的 setAdText方法来把string格式的输入转换为bean属性, ......
............................................
对于requestBody或httpEntity中数据的类型转换
Spring MVC中对于requestBody中发送的数据转换不是通过databind来实现,而是使用HttpMessageConverter来实现具体的类型转换。


我是通过ajax post提交数据的,是不是应该用HttpMessageConverter来实现?
0 请登录后投票
   发表时间:2012-08-26  
depravedangel 写道
jinnianshilongnian 写道


你直接使用 @DateTimeFormat(pattern="yyyy-MM-dd") 即可 不用自定义的


我的需求要实现多种日期格式注入,这种注解只能注入一种格式。

我看到一篇文章里面提到这些:
引用

Servlet中的输入参数为都是string类型,而spring mvc通过data bind机制将这些string 类型的输入参数转换为相应的command object(根据view和controller之间传输数据的具体逻辑,也可称为model attributes, domain model objects)。在这个转换过程中,spring实际是先利用java.beans.PropertyEditor中的 setAdText方法来把string格式的输入转换为bean属性, ......
............................................
对于requestBody或httpEntity中数据的类型转换
Spring MVC中对于requestBody中发送的数据转换不是通过databind来实现,而是使用HttpMessageConverter来实现具体的类型转换。


我是通过ajax post提交数据的,是不是应该用HttpMessageConverter来实现?


1、如果是通过ajax提交的参数 跟普通一样

2、如果ajax 提交的内容  需要HttpMessageConverter进行内容的转换;

3、你需要参考 http://www.iteye.com/topic/1123319#2348338
0 请登录后投票
   发表时间:2012-08-26  
jinnianshilongnian 写道
depravedangel 写道
jinnianshilongnian 写道


你直接使用 @DateTimeFormat(pattern="yyyy-MM-dd") 即可 不用自定义的


我的需求要实现多种日期格式注入,这种注解只能注入一种格式。

我看到一篇文章里面提到这些:
引用

Servlet中的输入参数为都是string类型,而spring mvc通过data bind机制将这些string 类型的输入参数转换为相应的command object(根据view和controller之间传输数据的具体逻辑,也可称为model attributes, domain model objects)。在这个转换过程中,spring实际是先利用java.beans.PropertyEditor中的 setAdText方法来把string格式的输入转换为bean属性, ......
............................................
对于requestBody或httpEntity中数据的类型转换
Spring MVC中对于requestBody中发送的数据转换不是通过databind来实现,而是使用HttpMessageConverter来实现具体的类型转换。


我是通过ajax post提交数据的,是不是应该用HttpMessageConverter来实现?


1、如果是通过ajax提交的参数 跟普通一样

2、如果ajax 提交的内容  需要HttpMessageConverter进行内容的转换;

3、你需要参考 http://www.iteye.com/topic/1123319#2348338


您的这篇文章我反复看过几遍,您这边是通过http://localhost:9080/springmvc-chapter4/dataBind?username=zhang&bool=yes&schooInfo.specialty=computer&hobbyList[0]=program&hobbyList[1]=music&map[key1]=value1&map[key2]=value2&phoneNumber=010-12345678&date=2012-3-18 16:48:48&state=blocked方式提交的。
我是通过提交http://localhost:9080/springmvc-chapter4/dataBind,post的内容为date=2012-3-18&state=blocked,难道我要使用HttpMessageConverter方式解析date=2012-3-18&state=blocked这种字符串?
0 请登录后投票
   发表时间:2012-08-26  
depravedangel 写道
jinnianshilongnian 写道
depravedangel 写道
jinnianshilongnian 写道


你直接使用 @DateTimeFormat(pattern="yyyy-MM-dd") 即可 不用自定义的


我的需求要实现多种日期格式注入,这种注解只能注入一种格式。

我看到一篇文章里面提到这些:
引用

Servlet中的输入参数为都是string类型,而spring mvc通过data bind机制将这些string 类型的输入参数转换为相应的command object(根据view和controller之间传输数据的具体逻辑,也可称为model attributes, domain model objects)。在这个转换过程中,spring实际是先利用java.beans.PropertyEditor中的 setAdText方法来把string格式的输入转换为bean属性, ......
............................................
对于requestBody或httpEntity中数据的类型转换
Spring MVC中对于requestBody中发送的数据转换不是通过databind来实现,而是使用HttpMessageConverter来实现具体的类型转换。


我是通过ajax post提交数据的,是不是应该用HttpMessageConverter来实现?


1、如果是通过ajax提交的参数 跟普通一样

2、如果ajax 提交的内容  需要HttpMessageConverter进行内容的转换;

3、你需要参考 http://www.iteye.com/topic/1123319#2348338


您的这篇文章我反复看过几遍,您这边是通过http://localhost:9080/springmvc-chapter4/dataBind?username=zhang&bool=yes&schooInfo.specialty=computer&hobbyList[0]=program&hobbyList[1]=music&map[key1]=value1&map[key2]=value2&phoneNumber=010-12345678&date=2012-3-18 16:48:48&state=blocked方式提交的。
我是通过提交http://localhost:9080/springmvc-chapter4/dataBind,post的内容为date=2012-3-18&state=blocked,难道我要使用HttpMessageConverter方式解析date=2012-3-18&state=blocked这种字符串?


跟普通方式一样。


2、如果ajax 提交的内容(body里的数据)  需要HttpMessageConverter进行内容的转换;
0 请登录后投票
   发表时间:2012-08-26  
jinnianshilongnian 写道
depravedangel 写道
jinnianshilongnian 写道
depravedangel 写道
jinnianshilongnian 写道


你直接使用 @DateTimeFormat(pattern="yyyy-MM-dd") 即可 不用自定义的


我的需求要实现多种日期格式注入,这种注解只能注入一种格式。

我看到一篇文章里面提到这些:
引用

Servlet中的输入参数为都是string类型,而spring mvc通过data bind机制将这些string 类型的输入参数转换为相应的command object(根据view和controller之间传输数据的具体逻辑,也可称为model attributes, domain model objects)。在这个转换过程中,spring实际是先利用java.beans.PropertyEditor中的 setAdText方法来把string格式的输入转换为bean属性, ......
............................................
对于requestBody或httpEntity中数据的类型转换
Spring MVC中对于requestBody中发送的数据转换不是通过databind来实现,而是使用HttpMessageConverter来实现具体的类型转换。


我是通过ajax post提交数据的,是不是应该用HttpMessageConverter来实现?


1、如果是通过ajax提交的参数 跟普通一样

2、如果ajax 提交的内容  需要HttpMessageConverter进行内容的转换;

3、你需要参考 http://www.iteye.com/topic/1123319#2348338


您的这篇文章我反复看过几遍,您这边是通过http://localhost:9080/springmvc-chapter4/dataBind?username=zhang&bool=yes&schooInfo.specialty=computer&hobbyList[0]=program&hobbyList[1]=music&map[key1]=value1&map[key2]=value2&phoneNumber=010-12345678&date=2012-3-18 16:48:48&state=blocked方式提交的。
我是通过提交http://localhost:9080/springmvc-chapter4/dataBind,post的内容为date=2012-3-18&state=blocked,难道我要使用HttpMessageConverter方式解析date=2012-3-18&state=blocked这种字符串?


跟普通方式一样。


2、如果ajax 提交的内容(body里的数据)  需要HttpMessageConverter进行内容的转换;


不是很理解您说的“跟普通方式一样”是啥意思,ajax post提交的数据就是在body体里吧,如果这样必须使用HttpMessageConverter进行转换,那是不是我必须解析像这样的字符串:“id=&adder=0&addtime=2012-08-26&moder=0&modtime=2012-08-26&deleteStatus=0&sortOrder=0&unitId=0&remark=1&name=1&password=1&email=1”?如果需要解析这个的话,就没意义了吧
0 请登录后投票
   发表时间:2012-08-26  
depravedangel 写道
jinnianshilongnian 写道
depravedangel 写道
jinnianshilongnian 写道
depravedangel 写道
jinnianshilongnian 写道


你直接使用 @DateTimeFormat(pattern="yyyy-MM-dd") 即可 不用自定义的


我的需求要实现多种日期格式注入,这种注解只能注入一种格式。

我看到一篇文章里面提到这些:
引用

Servlet中的输入参数为都是string类型,而spring mvc通过data bind机制将这些string 类型的输入参数转换为相应的command object(根据view和controller之间传输数据的具体逻辑,也可称为model attributes, domain model objects)。在这个转换过程中,spring实际是先利用java.beans.PropertyEditor中的 setAdText方法来把string格式的输入转换为bean属性, ......
............................................
对于requestBody或httpEntity中数据的类型转换
Spring MVC中对于requestBody中发送的数据转换不是通过databind来实现,而是使用HttpMessageConverter来实现具体的类型转换。


我是通过ajax post提交数据的,是不是应该用HttpMessageConverter来实现?


1、如果是通过ajax提交的参数 跟普通一样

2、如果ajax 提交的内容  需要HttpMessageConverter进行内容的转换;

3、你需要参考 http://www.iteye.com/topic/1123319#2348338


您的这篇文章我反复看过几遍,您这边是通过http://localhost:9080/springmvc-chapter4/dataBind?username=zhang&bool=yes&schooInfo.specialty=computer&hobbyList[0]=program&hobbyList[1]=music&map[key1]=value1&map[key2]=value2&phoneNumber=010-12345678&date=2012-3-18 16:48:48&state=blocked方式提交的。
我是通过提交http://localhost:9080/springmvc-chapter4/dataBind,post的内容为date=2012-3-18&state=blocked,难道我要使用HttpMessageConverter方式解析date=2012-3-18&state=blocked这种字符串?


跟普通方式一样。


2、如果ajax 提交的内容(body里的数据)  需要HttpMessageConverter进行内容的转换;


不是很理解您说的“跟普通方式一样”是啥意思,ajax post提交的数据就是在body体里吧,如果这样必须使用HttpMessageConverter进行转换,那是不是我必须解析像这样的字符串:“id=&adder=0&addtime=2012-08-26&moder=0&modtime=2012-08-26&deleteStatus=0&sortOrder=0&unitId=0&remark=1&name=1&password=1&email=1”?如果需要解析这个的话,就没意义了吧


从你错误信息中可以看出 你不是在body里传的 ,,,而是通过参数传的。参数已经拿到了。

org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.util.Date'; 
nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type java.util.Date for value '2012-08-26'; 

建议你回头再去看看http请求及响应格式
0 请登录后投票
   发表时间:2012-08-26  
jinnianshilongnian 写道
depravedangel 写道
jinnianshilongnian 写道
depravedangel 写道
jinnianshilongnian 写道
depravedangel 写道
jinnianshilongnian 写道


你直接使用 @DateTimeFormat(pattern="yyyy-MM-dd") 即可 不用自定义的


我的需求要实现多种日期格式注入,这种注解只能注入一种格式。

我看到一篇文章里面提到这些:
引用

Servlet中的输入参数为都是string类型,而spring mvc通过data bind机制将这些string 类型的输入参数转换为相应的command object(根据view和controller之间传输数据的具体逻辑,也可称为model attributes, domain model objects)。在这个转换过程中,spring实际是先利用java.beans.PropertyEditor中的 setAdText方法来把string格式的输入转换为bean属性, ......
............................................
对于requestBody或httpEntity中数据的类型转换
Spring MVC中对于requestBody中发送的数据转换不是通过databind来实现,而是使用HttpMessageConverter来实现具体的类型转换。


我是通过ajax post提交数据的,是不是应该用HttpMessageConverter来实现?


1、如果是通过ajax提交的参数 跟普通一样

2、如果ajax 提交的内容  需要HttpMessageConverter进行内容的转换;

3、你需要参考 http://www.iteye.com/topic/1123319#2348338


您的这篇文章我反复看过几遍,您这边是通过http://localhost:9080/springmvc-chapter4/dataBind?username=zhang&bool=yes&schooInfo.specialty=computer&hobbyList[0]=program&hobbyList[1]=music&map[key1]=value1&map[key2]=value2&phoneNumber=010-12345678&date=2012-3-18 16:48:48&state=blocked方式提交的。
我是通过提交http://localhost:9080/springmvc-chapter4/dataBind,post的内容为date=2012-3-18&state=blocked,难道我要使用HttpMessageConverter方式解析date=2012-3-18&state=blocked这种字符串?


跟普通方式一样。


2、如果ajax 提交的内容(body里的数据)  需要HttpMessageConverter进行内容的转换;


不是很理解您说的“跟普通方式一样”是啥意思,ajax post提交的数据就是在body体里吧,如果这样必须使用HttpMessageConverter进行转换,那是不是我必须解析像这样的字符串:“id=&adder=0&addtime=2012-08-26&moder=0&modtime=2012-08-26&deleteStatus=0&sortOrder=0&unitId=0&remark=1&name=1&password=1&email=1”?如果需要解析这个的话,就没意义了吧


从你错误信息中可以看出 你不是在body里传的 ,,,而是通过参数传的。参数已经拿到了。

org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.util.Date'; 
nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type java.util.Date for value '2012-08-26'; 

建议你回头再去看看http请求及响应格式

您说的body里是response吧,可能我理解有误了,现在回到原来的问题上来,
你的那篇文章中提到了:
<!-- ①注册ConversionService -->  
<bean id="conversionService" class="org.springframework.format.support.  
                                             FormattingConversionServiceFactoryBean">  
    <property name="converters">  
       <list>  
            <bean class="cn.javass.chapter7.web.controller.support.  
                             converter.StringToPhoneNumberConverter"/>  
            <bean class="cn.javass.chapter7.web.controller.support.  
                             converter.StringToDateConverter">  
                <constructor-arg value="yyyy-MM-dd"/>  
            </bean>  
        </list>  
    </property>  
</bean>  
...............................
上集成过程看起来比较麻烦,后边我们会介绍<mvc:annotation-driven>和@EnableWebMvc,ConversionService会自动注册,后续章节再详细介绍。

我的那段配置没起作用,是不是哪儿需要注意些什么细节?
0 请登录后投票
   发表时间:2012-08-26  
LZ真是个好人呐,在LZ的帮助下,问题解决了,原因是我用的maven多模块,另外一个module下也配置了<mvc:annotation-driven />,覆盖了我这边的配置。

原来都是采用maven自动构建,每次各个module独立打包,但那样每次改下代码都得重新构建,最近在试怎么方便eclipse开发的时候用eclipse编译代码到web classes下,所以才出现了这个错误。

在这边顺便请教下,各位用maven多模块开发的时候是采用什么方式构建的呢?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics