【问题标题】:Spring @RequestMapping春天@RequestMapping
【发布时间】:2017-07-14 09:20:06
【问题描述】:

我对 Spring MVC RequestMapping 注释有疑问。需要你的帮助。

我创建了一个 IPSL 控制器,我希望该 IPSL 控制器处理所有请求 url。我在这个控制器中创建了两个方法。

1)handleLogoutRequest :- 这个方法应该在下面的 url 上调用。

2)handleRequest :- 此方法应在除注销之外的所有请求 url 上调用。

http://localhost:9086/webapp/login 或者 http://localhost:9086/webapp/add 或者 http://localhost:9086/webapp/remove

这是我的示例代码。但它没有按预期工作。

@Controller
public class IPSLController {

    @RequestMapping(value={"/logout/*"},method = RequestMethod.POST)
    protected void handleLogoutRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        System.out
                .println("........................IPSLController logout request.......................................");

    }


    @RequestMapping(method = RequestMethod.POST,value={"/*"})
    protected void handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        System.out
                .println("........................IPSLController all request Post.......................................");

    }
    }

【问题讨论】:

  • 你的问题是?
  • “未按预期工作”是什么意思?
  • 我正在寻找正确的映射值。上面的代码没有按预期工作。注销请求也来到了handleRequest方法。
  • 恕我直言,它按预期工作。 /logout 由您的全部处理,正如预期的那样,这就是您的映射。接下来你正在做的事情也是一个坏主意,不要写1个控制器来处理所有事情,那是调度程序servlet的作用。控制器应该是细粒度的对象。
  • 为什么不让 spring security 处理登录/注销过程?你在这里尝试的已经很好地实现了,并且经过了测试

标签: java spring spring-mvc


【解决方案1】:

您应该为您使用的每个控制器使用一个通用前缀,以便更好地区分它们。此外,您不需要任何“/”来进行这样的调用。

@Controller
@RequestMapping("ispl")
public class IPSLController {

@RequestMapping(value={"logout"},method = RequestMethod.POST)
protected void handleLogoutRequest(HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    System.out
            .println("........................IPSLController logout request.......................................");

}


@RequestMapping(method = RequestMethod.POST,value={"hello"})
protected void handleRequest(HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    System.out
            .println("........................IPSLController all request Post.......................................");

 }
}

如果你现在想通过 ServletRequest 或使用 restService 或类似的东西来调用它们,你应该像这样声明它们

@GET   
@Path("ispl/logout")
public void Method (HttpServletResponse ...)

【讨论】:

    【解决方案2】:

    它正在以应有的方式工作。您有/*/logout/* 的映射。因此,当您发布到/logout 时,它会调用/* 的方法。我怀疑如果您向/logout/something 发帖,它会调用您的注销处理程序。

    如果你想让它工作,你不能为第二种方法使用通配符映射。至少使用/something/*,以便spring可以对映射做出正确的决定。

    【讨论】:

    • @Nester :这不是 JAXRS。
    • @RossiRobinsion 对不起,我的错)
    猜你喜欢
    • 2016-03-11
    • 2017-05-31
    • 2011-09-23
    • 2011-11-28
    • 2020-10-13
    • 2016-05-25
    • 2014-08-22
    • 2013-11-02
    相关资源
    最近更新 更多