5

残りのサービスで完全な ISO タイムスタンプとしてパス パラメーターを使用したいと考えています。

http://domain:8080/ctx/someObj/2000-10-31 01:30:00.000-05:00

以前は mvc:annotation ドリブンをオンにしていましたが、それをオフにして、DefaultAnnotationHandlerMapping で "useDefaultSuffixPattern" を false に設定できるようにしました。

コントローラーコード

@RequestMapping(value = "/lwc/{userMidnightTime}", method = RequestMethod.GET)
@ResponseBody
public List<ProgramSnippetView> getLiveWebcastsWithin24HoursOfTime(@PathVariable(value = "userMidnightTime") @DateTimeFormat(iso= DATE_TIME) Date userMidnightTime) {
    Calendar cal = new GregorianCalendar();
    cal.setTime(userMidnightTime);
    cal.add(Calendar.HOUR, 24);
    Date endTime = cal.getTime();
    return programService.getLiveWebcastSnippetsWithProductionDateInRange(userMidnightTime, endTime);
}

次のエラーが表示されます。フレームワークは最終的に、joda time を使用して作業を行うのではなく、正しい String を使用して非推奨の Date.parse() メソッドを呼び出していることがわかります。

112977 [http-apr-8080-exec-7] DEBUG org.springframework.beans.BeanUtils - No property       editor [java.util.DateEditor] found for type java.util.Date according to 'Editor' suffix convention
117225 [http-apr-8080-exec-7] DEBUG org.springframework.beans.TypeConverterDelegate - Construction via String failed for type [java.util.Date]
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.Date]: Constructor threw exception; nested exception is     java.lang.IllegalArgumentException

次のように org.springframework.format.annotation.DateTimeFormat.java 注釈ファイルで指定されているように、joda に完全な ISO 日付を解析させたい:

/** 
     * The most common ISO DateTime Format <code>yyyy-MM-dd'T'hh:mm:ss.SSSZ</code> e.g. 2000-10-31 01:30:00.000-05:00.
     * The default if no annotation value is specified.
     */
    DATE_TIME,  .....

アプリ コンテキストの構成

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<context:component-scan base-package="blah.blah"/>

<mvc:resources mapping="/resources/**" location="/resources/"/>


<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="formatterRegistrars">
        <set>
            <bean class="org.springframework.format.datetime.joda.JodaTimeFormatterRegistrar">
                <property name="useIsoFormat" value="true"/>
            </bean>
        </set>
    </property>
</bean>


<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="order" value="0"/>
    <property name="useDefaultSuffixPattern" value="false"/>

    <!-- allows for periods in url -->
</bean>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="webBindingInitializer">
        <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="validator" ref="validator"/>
        </bean>
    </property>

    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <!--<property name="writeAcceptCharset" value="false" />-->
            </bean>
            <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>


            <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
        </list>
    </property>


</bean>


<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="mediaTypes">
        <map>
            <entry key="json" value="application/json"/>
        </map>
    </property>

    <property name="defaultViews">
        <list>
            <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
                <property name="prefixJson" value="true"/>
            </bean>
        </list>
    </property>
</bean>


<mvc:view-controller path="/" view-name="home"/>

4

2 に答える 2

0

考えられる問題の 1 つは、conversionService を handlerAdapter に登録していないことです。次の方法で行うことができます。

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="webBindingInitializer">
        <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="conversionService" ref="conversionService"/>
            <property name="validator" ref="validator"/>
        </bean>
    </property>
于 2012-10-10T00:26:06.400 に答える
0

これは遅すぎる(正確には3年)が、他の誰かを助けるかもしれない.

URL に時間指定子「T」がありません。試してください

http://domain:8080/ctx/someObj/2000-10-31T01:30:00.000-05:00 

それ以外の

http://domain:8080/ctx/someObj/2000-10-31 01:30:00.000-05:00
于 2016-04-26T10:51:27.233 に答える