2013-08-05 53 views
1

我有一個愚蠢的問題我不知道爲什麼會發生這種情況 - 如果我在我的映射中有斜槓,視圖解析失敗;我有這樣的控制器:@RequestMapping斜槓無法返回視圖

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
public class PartialsController { 

    @RequestMapping ("/views/partials/{view}") // Doesn't work! 
    public String partial (@PathVariable ("view") String view) { 
    System.out.println ("\n\nVIEW=\"" + view + "\"\n\n"); 
    return "partials/" + view; 
    } 

    @RequestMapping ("/partial-{view}-view") // Works!!! 
    public String test (@PathVariable ("view") String view) { 
    return partial (view); 
    } 

    @RequestMapping ("/views/partials/{view}/show.html") // Doesn't work! 
    public String test2 (@PathVariable ("view") String view) { 
    return partial (view); 
    } 
} 

完整堆棧跟蹤是在這裏:http://pastebin.com/CXwYd9i3這裏是它的頂部(我看到我在任何情況下的System.out):

[DEBUG] : Could not complete request 
java.lang.NullPointerException 
at java.net.URLEncoder.encode(URLEncoder.java:205) 
at java.net.URLEncoder.encode(URLEncoder.java:171) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:474) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) 
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669) 
    ... 

我真的很喜歡使用第一種方法,它對我所做的事情更有意義;非常感謝您的幫助!

P.S.忘了補充,這是我的Java配置:

@Override 
public void onStartup (ServletContext servletContext) throws ServletException { 
    AnnotationConfigWebApplicationContext mvcContext = new AnnotationConfigWebApplicationContext(); 
    mvcContext.register (MvcConfiguration.class); 
    Dynamic dispatcher = servletContext.addServlet ("dispatcher", new DispatcherServlet (mvcContext)); 
    dispatcher.setLoadOnStartup (1); 
    dispatcher.addMapping ("/"); 
} 

回答

0

其實我想通了,打字的迴應讓我覺得這事是錯的我設立JSP視圖解析器,確實存在:

@Bean (name = "jspViewResolver") 
public ViewResolver jspViewResolver() { 
    return new InternalResourceViewResolver() { 
    { 
     setPrefix ("/META-INF/resources/mev/views/"); 
     setSuffix (".jsp"); 
     setOrder (2); 
     setExposeContextBeansAsAttributes (true); 
    } 
    }; 
} 

我在META-INF之前沒有引導斜槓。是的,我在一個奇怪的地方有我的看法。不管怎樣,謝謝!

0

試試這個:

@Override 
public void onStartup (ServletContext servletContext) throws ServletException { 
    AnnotationConfigWebApplicationContext mvcContext = new AnnotationConfigWebApplicationContext(); 
    mvcContext.register (MvcConfiguration.class); 
    Dynamic dispatcher = servletContext.addServlet ("dispatcher", new DispatcherServlet (mvcContext)); 
    dispatcher.setLoadOnStartup (1); 
    dispatcher.addMapping ("/*"); //<- It will dispatch all URLs, not only those which starts with/
} 
+0

我試過了,我只是直線上升404然後 - 沒有找到映射。這對我來說也是有道理的,因爲我認爲明星意味着所有映射直到另一個斜線。問題不是映射本身中的多個斜槓,它與視圖結合,因爲我在應用程序的其他地方映射了多個斜槓,返回JSON(@ResponseBody因此沒有視圖分辨率發生),一切正常,還有帶有斜線的控制器確實被調用,我確實看到了我放入的任何日誌記錄,所以無論從哪裏出錯都會在控制器返回後出錯。 –