【发布时间】:2018-02-19 04:26:23
【问题描述】:
我正在使用 Spring Boot 开发一个 Web 应用程序。
用例是,如果用户访问主页,他每次都会被重定向到一个新的唯一 URL。例如:www.qqd.com --> www.qqd.com\jsdh。 下次它会有所不同,比如 www.qqd.com\dkjfbd
但在这两种情况下,它都会显示相同的 JSP。 我将它作为一个 REST 框架来做,以便将来我也可以扩展到移动应用程序开发。
package com.example.qqd;
import org.apache.log4j.Logger;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
@RestController
public class QDetailsService {
Logger log = Logger.getLogger(QDetailsService.class);
@GetMapping("/")
public ModelAndView getNewUrl(ModelMap model){
log.info("URL generated is: ");
return new ModelAndView("redirect:/"+"abcde", model);
}
@RequestMapping(value="/{url}")
public String addDetails(@PathVariable String url){
log.info("URL: " + url + " , detail: " );
//return new ModelAndView("home.jsp");
return "home";
}
}
ServletInitializer.java
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(QqdApplication.class);
}
}
QQdApplication.java
@SpringBootApplication //This annotation means, it is the starting point of the app.
public class QqdApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(QqdApplication.class, args);
}
}
【问题讨论】:
-
您正在使用
@RestController注释。应该是@Controller。 RestController 具有 @ResponseBody 注释,使其将响应绑定到正文,而不是解析视图。 -
如果我使用@Controller,addDetails()应该返回String还是ModelAndView()?
-
您可以使用 String 或 ModelAndView。随心所欲。
-
我都试过了,我得到了出现意外错误(类型=内部服务器错误,状态=500)。圆形视图路径 [home]:将再次分派回当前处理程序 URL [/Qqd/home]。检查您的 ViewResolver 设置! (提示:由于默认视图名称生成,这可能是未指定视图的结果。)
-
这是因为您的
@RequestMapping(value="/{url}")映射基本上捕获了所有URL。
标签: spring jsp spring-mvc spring-boot