近期使用struts2的rest-plugin,参考官方示例struts2-rest-showcase,做了一个restful service小项目,但官网提供的这个示例过于简单,埋下了巨坑无数,下面是一些遇到的问题及解决办法:
注:下面这些问题,很多是相互关联的,要解决一个,得同时解决另一个。
一、与config-browser-plugin、convension-plugin、非rest Action 共存的问题
rest-plugin的气场实在太强,一旦使用,config-browser-plugin、convension-plugin这二个plugin就挂了
解决思路:将所有rest服务,都放在/rest/路径下,用package的namespace把它隔离出来,其它常规的action,放在其它路径,这样二者就不冲突了
1 <!-- Overwrite Convention --> 2 <constant name="struts.convention.action.suffix" value="Controller" /> 3 <constant name="struts.convention.action.mapAllMatches" value="true" /> 4 <!--<constant name="struts.rest.content.restrictToGET" value="false" />--> 5 <constant name="struts.convention.default.parent.package" value="rest-default" /> 6 <constant name="struts.convention.package.locators" value="action" /> 7 <!-- <constant name="struts.rest.namespace" value="/rest" /> --> 8 <constant name="struts.convention.action.includeJars" value=".*?/_wl_cls_gen.*?jar(!/)?" /> 9 <constant name="struts.convention.exclude.parentClassLoader" value="true" /> 10 <constant name="struts.convention.action.fileProtocols" value="jar,zip,vfsfile,vfszip" /> 11 12 <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper" /> 13 <constant name="struts.mapper.prefixMapping" value="/rest:rest,:struts" /> 14 <constant name="struts.mapper.alwaysSelectFullNamespace" value="false" /> 15 16 <package name="default" namespace="/rest" extends="rest-default" />