2012-04-10 86 views
1

我在Spring MVC RequestMapping中遇到了问题,我希望有人可以给我如何继续的建议。Spring MVC RequestMapping混淆

我正在处理一个将被旧客户端访问的服务器。客户发送简单的请求(见下文),但无法以任何方式更改以适应新的服务器。

客户端发送获取或形式/dbintf?命令= GETINFO的帖子,ACCTNUM = 111 服务器称为dbintf,它返回一个简单的文本响应。

我想为每个命令创建一个Spring控制器,并用 注释一个基于命令参数的params映射的单个控制器方法。所以在GETINFOController中的映射将是:

@RequestMapping(params="command=GETINFO") 
public String serviceRequest(.... 

但是,我无法得到这个工作。以下是该服务的一些详细信息。

在web.xml中的servlet映射:

<servlet-mapping> 
    <servlet-name>dbintf</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

在INTF-servlet.xml文件中的注释扫描指令

<context:component-scan base-package="com.intf.controller" /> 
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> 
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> 

我一直在努力的事情不同的组合,试图让这个计划工作,我会烧这 反复试验工作下降到两个例子:

这是行不通的。回应是:“请求的资源()不可用。”

@RequestMapping(params="command=GETINFO") 
public class TESTController { 
    @RequestMapping(method = RequestMethod.GET) 
    public String serviceRequest 

如果我更改URL添加另一个级别:?/ dbintf/test命令= GETINFO,ACCTNUM = 111 它的工作原理,如果我一个URL模式添加到处理程序方法的注释。

@RequestMapping(params="command=GETINFO") 
public class TESTController { 
    @RequestMapping(value="/test",method = RequestMethod.GET) 
    public String serviceRequest 

这让我觉得,params映射本身将无法正常工作。看起来,URL 模式必须是任何映射方案的一部分。但是,对于我的情况,由于客户端请求URL被修复为:dbintf?....,因此没有可用的URL地址 。 我的问题:是否可以单独使用基于参数的映射而不是 与模式结合使用?如果是这样,我错过了什么?

预先感谢任何帮助或建议, beeky

回答

0

我没有在你的配置看你在哪里映射你的控制器“/ dbintf”?您已将DispatcherServlet(假设“dbintf”servlet是您的DispatcherServlet)映射到“/”而不是“/ dbintf”。你是否在部署你的web应用程序,以使它在相对于你的容器的“/”的“/ dbintf”中可用?我想我想知道的是,你可能只需要添加一些配置到你的@RequestMapping的:

@RequestMapping(value="/dbintf", params="command=GETINFO")