3

我有一个 scala 控制器:

@Controller
@RequestMapping(Array("/welcome"))
class HelloController{

  @RequestMapping{val method = Array(RequestMethod.GET)}
  def printWelcome(model: ModelMap) = {
    println("IN: printWelcome(..)")
    val greeting = new GreetingBean("Yo!", "Adam")
    model.addAttribute("message", greeting);
    "secure" // sends to the /jsf/secure.xhtml page
  }

  @RequestMapping{val value = Array("/greeting"), val method = Array(RequestMethod.GET)}
  def greeting(model: ModelMap) = {
    println("IN: greeting(..)")
    val greeting = new GreetingBean("Greetings", "Davies")
    model.addAttribute("greeting", greeting);
    "greeting"; // sends to the /jsf/greeting.xhtml page
  }
}

当我打电话时http://localhost:8080/jsf-spring-guice/welcome,消息IN: printWelcome(..)显示在控制台中,并导航到正确的页面。

当我打电话时,http://localhost:8080/jsf-spring-guice/welcome/greeting我得到一个404错误。

我尝试以不同的方式在问候方法上指定@RequestMapping:

@RequestMapping{val value = Array("greeting"), val method = Array(RequestMethod.GET)}
@RequestMapping{val value = Array("/greeting")}
@RequestMapping(Array("/greeting"))
@RequestMapping(Array("/greeting"), Array(RequestMethod.GET))

并反编译生成的类,它总是看起来很好。但是我总是对欢迎感到满意,对 /welcome/greeting 总是 202

反编译的 Scala 类有这个:

@RequestMapping({"/welcome"})

和这个:

@RequestMapping(value={"/greeting"}, method={org.springframework.web.bind.annotation.RequestMethod.GET})

我看不出这不应该起作用的任何原因。任何人都可以帮忙吗?

4

2 回答 2

0

已解决 ...但在 Spring 文档中找不到答案。

情况是我在web.xml

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/welcome/*</url-pattern>
</servlet-mapping>

这意味着映射 '@RequestMapping(Array("/welcome"))' 无效,任何请求http://localhost:8080/jsf-spring-guice/welcome都将由标记为 的方法处理@RequestMapping{val method = Array(RequestMethod.GET)}。一种默认get

线索是当我进入http://localhost:8080/jsf-spring-guice/welcome/welcome/greeting/标记为的方法时@RequestMapping{val value = Array("/greeting"), val method = Array(RequestMethod.GET)}被调用。在这一点上,很明显,双重welcome意味着有些不对劲。

所以基本上,url-pattern它作为 URL 模式的前缀(我们都知道),但问题是具有简单 GET 方法的控制器将作为默认值。

注意自我不要使用具有相同请求映射的控制器url-pattern

于 2013-01-20T16:06:24.780 回答
0

没有检查和编译,但是方法@RequestMapping的注解printWelcome也应该有指定的值,即使它是空的(“”)。

指定的值充当过滤器,这可能是问题的原因。

于 2013-01-20T12:25:58.963 回答