2016-08-24 15 views
1

我有以下控制器返回與URL路徑的靜態頁參數

@Controller 
@RequestMapping("/room/{roomId:^(?!main.html$).*}") 
public class Rooms { 

    @RequestMapping 
    public String index(@PathVariable(value = "roomId") String id) { 
     // do some stuff... 
     return "main.html"; 
    } 
} 

我有一個main.html中的文件在我的資源/文件夾的靜態。我想當用戶轉到/ room/{something}做一些處理時,返回我擁有的靜態main.html頁面。

一切我嘗試在網頁結果未發現異常或

javax.servlet.ServletException: Circular view path [main.html]: 
would dispatch back to the current handler URL 
[/room/main.html] again 

我缺少什麼,讓這個工作?

感謝您的幫助

+0

項目中的ded InternalViewResolver? – Vaibs

+0

不,我今年春天是全新的東西。我認爲春天應該能夠處理HTML文件,而無需任何配置?我如何去添加一個內部視圖解析器? – AAG

+0

此外,如果我沒有URL路徑參數,然後返回main.html,它工作正常。我介紹URL路徑參數時只有一個問題。 – AAG

回答

0

如果你正在做的配置類視圖解析器

@Bean 
    public UrlBasedViewResolver urlBasedViewResolver() 
    { 
     UrlBasedViewResolver res = new InternalResourceViewResolver(); 
     res.setViewClass(JstlView.class); 
     res.setPrefix("/WEB-INF/"); 
     res.setSuffix(".jsp"); 
     return res; 
    } 

如果使用XML

<beans:bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <beans:property name="prefix" value="/WEB-INF/jsp/" /> 
     <beans:property name="suffix" value=".jsp" /> 
    </beans:bean> 

此外,通過下面的代碼更改控制器

@RestController 
@RequestMapping("/room/") 
public class Rooms { 

    @RequestMapping(method = RequestMethod.GET) 
    public ModelAndView index(@PathVariable(value = "roomId") String id) { 
     // do some stuff... 

     ModelAndView model = new ModelAndView(); 
     model.setViewName("main"); 
     return model; 
    } 
} 
您的廣告
+1

感謝您的建議。只要我可以,我會試試這個。幾個問題。爲什麼我們將後綴設置爲.jsp?我的文件是main.html。如果我的html文件是資源/靜態的,爲什麼前綴是WEB-INF/jsp?我應該移動我的文件嗎?最後,我可以將代碼更改爲您提供的內容。但是,你能解釋爲什麼返回一個模型和視圖,而不是我擁有的字符串?謝謝 – AAG

+0

你也可以設置.html也。我使用.jsp這就是爲什麼我寫你可以改變它。通常jsp文件保存在web-Inf內的文件夾中。但是你也可以改變文件的位置。它所有關於配置。只需在配置文件中提到正確的位置即可。我還沒有嘗試使用返回字符串的方法,但您可以嘗試。 – Vaibs