2

2 つのリクエスト URL があります

/domain/entity/list.vendorname /domain/entity/list

コントローラーのマッピングは次のとおりです。

@RequestMapping(value = "/entity/list.{vendorId}")

@RequestMapping(value = "/entity/list")

問題:-

私の URL :- /domain/entity/list.vendorname

にマッピングされています @RequestMapping(value = "/entity/list")

他の方法に代わる方法。

助けてください

4

2 に答える 2

2

その理由は、デフォルトでは、リクエスト URL のマッピングを見つけるコンポーネント( RequestMappingHandlerMapping ) であり、接尾辞にも一致します (/entity/list/entity/list.*同等と見なされます。修正は、接尾辞の一致をオフにすることである可能性があります。

<bean name="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    <property name="useSuffixPatternMatch" value="false"></property>
</bean>

ただし、これはまた、handlerAdapter も手動で登録する必要があることを意味します。使用する<mvc:annotation-driven/>場合は、次の行に沿って何かに置き換えることができます。

<bean name="handlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="webBindingInitializer">
        <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="conversionService" ref="conversionService"></property>

            </property>
        </bean>
    </property>
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"></bean>
            <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean>
            <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean>
            <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"></bean>
            <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean>
            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
        </list>
    </property>
</bean>
于 2012-07-25T21:28:05.987 に答える
0

Spring 3.2 以降、RequestMappingHandlerMapping Bean の useRegisteredSuffixPatternMatch プロパティを設定して、suffixPattern 認識をアクティブに保ちながら登録された拡張機能に限定することもできます。

ここでは、json および xml 拡張機能のみを定義します。

<bean id="handlerMapping"
      class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    <property name="contentNegotiationManager" ref="contentNegotiationManager"/>
    <property name="useRegisteredSuffixPatternMatch" value="true"/>
</bean>

<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
    <property name="favorPathExtension" value="false"/>
    <property name="favorParameter" value="true"/>
    <property name="mediaTypes">
        <value>
            json=application/json
            xml=application/xml
        </value>
    </property>
</bean>

mvc:annotation-driven は、カスタム Bean を提供する contentNegotiation オプションを受け入れるようになりましたが、RequestMappingHandlerMapping のプロパティを true (デフォルトは false) に変更する必要があることに注意してください ( https://jira.springsource.org/browse/SPR-7632を参照)。 )。

そのため、すべての mvc:annotation 主導の構成をオーバーライドする必要があります。カスタム RequestMappingHandlerMapping を要求するために、Spring へのチケットを開きました: https://jira.springsource.org/browse/SPR-11253。興味のある方は投票してください。

オーバーライドするときは、カスタム実行管理のオーバーライドも考慮するように注意してください。そうしないと、すべてのカスタム例外マッピングが失敗します。リスト Bean で messageCoverters を再利用する必要があります。

<util:list id="messageConverters">
    <bean class="your.custom.message.converter.IfAny"></bean>
    <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.StringHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
</util:list>

<bean name="exceptionHandlerExceptionResolver"
      class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver">
    <property name="order" value="0"/>
    <property name="messageConverters" ref="messageConverters"/>
</bean>

<bean name="handlerAdapter"
      class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="webBindingInitializer">
        <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="validator">
                <bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
            </property>
        </bean>
    </property>
    <property name="messageConverters" ref="messageConverters"/>
</bean>

<bean id="handlerMapping"
      class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    <property name="contentNegotiationManager" ref="contentNegotiationManager"/>
    <property name="useRegisteredSuffixPatternMatch" value="true"/>
</bean>

<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
    <property name="favorPathExtension" value="false"/>
    <property name="favorParameter" value="true"/>
    <property name="mediaTypes">
        <value>
            json=application/json
            xml=application/xml
        </value>
    </property>
</bean>

私が参加しているオープン ソース プロジェクトResthubで、これらのテーマに関する一連のテストを実装しました。 https://github.com/resthub/resthub-spring-stack/pull/219/filesおよびhttps:// github.com/resthub/resthub-spring-stack/issues/217

于 2013-12-23T12:18:20.940 に答える