簡體   English   中英

當我在struts2 + spring3項目中添加struts2-rest-plugin時,struts操作未采用默認方法(執行)

[英]struts action is not taking the default method(execute) when i add struts2-rest-plugin in struts2+spring3 project

我正在嘗試使用struts2創建一個寧靜的服務。 當我在依賴項中添加struts2-rest-plugin時,struts操作未采用默認方法(execute)。它正在尋找create()或index()方法。

struts2-convention-plugin和struts2-rest-plugin

<dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-convention-plugin</artifactId>
            <version>${struts.version}</version>
</dependency>
<dependency>
             <groupId>org.apache.struts</groupId>
             <artifactId>struts2-rest-plugin</artifactId>
             <version>${struts.version}</version>
</dependency>

我在struts.xml中擁有所有這些常量

    <constant name="struts.devMode" value="false" />
    <constant name="struts.i18n.encoding" value="UTF-8" />
    <constant name="struts.action.extension" value="action," />
    <constant name="struts.objectFactory" value="spring" />
    <constant name="struts.custom.i18n.resources" value="ApplicationResources,errors,global" />
    <constant name="struts.multipart.maxSize" value="2097152" />
    <constant name="struts.ui.theme" value="css_xhtml" />
    <constant name="struts.codebehind.pathPrefix" value="/WEB-INF/pages/" />
    <constant name="struts.enable.SlashesInActionNames" value="true" />
    <constant name="struts.convention.action.disableScanning" value="true" />
    <constant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
   <constant name="struts.convention.package.locators" value="controller"/> 
   <constant name="struts.convention.action.suffix" value="Controller"/> 
   <constant name="struts.convention.action.mapAllMatches" value="false"/>
   <constant name="struts.convention.default.parent.package" value="rest-default"/>

執行Web項目時出現錯誤

ERROR [tomcat-http--34] Dispatcher.error(38) | Exception occurred during processing request: com.vxl.appanalytix.webapp.action.LoginAction.create()
java.lang.NoSuchMethodException: com.vxl.appanalytix.webapp.action.LoginAction.create()
    at java.lang.Class.getMethod(Class.java:1655)
    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.getActionMethod(AnnotationValidationInterceptor.java:75)
    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:47)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    at org.apache.struts2.rest.RestActionInvocation.invoke(RestActionInvocation.java:138)
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    at org.apache.struts2.rest.RestActionInvocation.invoke(RestActionInvocation.java:138)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    at org.apache.struts2.rest.RestActionInvocation.invoke(RestActionInvocation.java:138)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)

我的項目使用spring進行依賴管理,安裝了我們計划使用struts2的spring MCV。我嘗試使用spring restful服務,但遇到了一些分配錯誤,所以我轉到了struts2-rest-plugin。 在這里,作為服務實現的控制器類分別具有用於HTTP GET和PUT的index()和create()之類的方法。 其余插件的工作原理。

請閱讀文檔[1] [2],如果要將普通的Web應用程序與Rest服務混合使用,請考慮將所有其余端點移動到帶有struts.rest.namespace [3]的專用命名空間中。

[1] http://struts.apache.org/development/2.x/docs/rest-plugin.html

[2] http://struts.apache.org/development/2.x/docs/convention-plugin.html#ConventionPlugin-ConvertingaCodebehindbasedapplicationtoConvention

[3] http://struts.apache.org/development/2.x/docs/rest-plugin.html#RESTPlugin-Settings

使用struts2-rest插件以及convention-plugin意味着您的操作類不再具有execute方法作為默認方法。 實際上,您可能沒有執行方法,但仍然具有有效的REST-ful控制器。

URL映射到您的類的方式由convention-plugin定義。 此處明確說明了這一點: http : //struts.apache.org/docs/convention-plugin.html

此外, struts.rest.namespace -approach並沒有為我工作。 不知何故,Struts無法以這種方式工作。 相反,我做了以下事情:

<constant name="struts.convention.default.parent.package" value="myRestPackage"/>
<package name="myRestPackage" extends="rest-default" namespace="/rest"/>

這樣,我欺騙Struts感覺到我的REST Web服務調用的名稱空間是/rest

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM