【问题标题】:Spring MVC 3.0 - restrict what gets routed through the dispatcher servletSpring MVC 3.0 - 限制通过调度程序 servlet 路由的内容
【发布时间】:2012-10-09 01:28:12
【问题描述】:

我想使用 Spring MVC 3.0 为 AJAX 事务构建接口。我希望结果以 JSON 形式返回,但我不一定希望使用 JSP 构建网页。我只希望通过 DispatcherServlet 拦截/路由对控制器的请求,并且项目的其余部分继续像没有 Spring 集成的常规 Java webapp 一样运行。

我的想法是将 web.xml 中的 servlet-mapping url 模式定义为类似于“/controller/*”,然后在我的控制器中将类级别 @RequestMapping 设置为类似于 @RequestMapping("/controller/ colors"),最后在方法级别有 @RequestMapping(value = "/controller/colors/{name}", method = RequestMethod.GET)。

唯一的问题是,我不确定是否需要在所有 RequestMappings 中继续添加“/controller”,无论我尝试什么组合,我都会不断收到 404 requested resource not available 错误。

这里的最终目标是让我能够在网络浏览器中输入“http://localhost:8080/myproject/controller/colors/red”并以 JSON 字符串的形式取回 RGB 值。

【问题讨论】:

    标签: ajax spring model-view-controller rest


    【解决方案1】:

    我不一定希望网页使用 JSP 构建

    Spring MVC 提供了许多 view template integration options,从直通到原始 html 到丰富的模板引擎,如 Velocity 和 Freemarker。也许其中一个选项会适合您的需求。

    【讨论】:

    • 谢谢——事实证明我什至不必在配置中明确定义 MappingJacksonJsonView。只需使用 并返回 ModelMap 作为该方法的响应,就会自动将地图转换为 JSON。
    【解决方案2】:

    您需要在任何地方添加整个路径是不正确的,路径是累积的-

    如果你有一个用于 Spring 的 DispatcherServlet 的 /controller/* servlet 映射,那么任何对 /controller/* 的调用现在都将由 DispatcherServlet 处理,你只需要处理 @RequestMapping 中的其余路径信息,所以你的控制器可以是

    @Controller
    @RequestMapping("/colors")
    public class MyController{
    
     @RequestMapping("/{name} 
     public String myMappedMethod(@PathVariable("name") String name, ..){
     }
    
    }
    

    所以现在,这个方法将通过对/controller/colors/blue等的调用来处理。

    【讨论】:

    • 现在的问题是,如果我将 web.xml 中调度程序 servlet 的 url-pattern 设置为“/”,我仍然只能访问控制器中的映射方法。一旦我将 /controller/* 放入 web.xml,我的所有标准 HTML 都可以正常工作,因为它不再通过调度程序进行路由,但是我的所有控制器都停止工作。我收到“请求的资源 (/myproject/controller/colors/blue) 不可用。”我在其他地方读到了这个确切的问题,他们说将 添加到 InternalResourceViewResolver。还是不行:(
    • 所以我刚刚发现如果我这样做“(/controller/controller/colors/blue”。WTF?我的控制器类用RequestMapping“/controller/colors”注释并且方法被注释“ /{name}"。
    • 所以我只是将控制器中的类级别 RequestMapping 更改为“/colors”,现在它可以按我的意愿工作了。没有静态路由到调度程序 servlet 并访问我的控制器我键入 /controller/colors/blue。谢谢!
    猜你喜欢
    • 2015-09-10
    • 2016-08-02
    • 2018-05-26
    • 1970-01-01
    • 2014-10-13
    • 2015-11-05
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多