返回一个ModelAndView时,竟然根据ModelAndView中设置的viewName自动转发了,然后触发了另外一个方法,由于入参类型不对导致了报错

Stgemu 2018-03-07 11:57:07

访问路径是localhost:8080/users

RestController
@RequestMapping("/users")
public class UserConroller {

@Autowired
private UserRepository userRepository;

/**
* 查询用户列表
* @param model
* @return
*/
@GetMapping
public ModelAndView userList(Model model) {
List<User> userList=userRepository.listUsers();
model.addAttribute("userList",userList);
model.addAttribute("title","用户管理");
ModelAndView md=new ModelAndView("users/userlist","userModel",model);
return md;
}

/**
* 查询用户信息
* @param model
* @return
*/
@GetMapping("{id}")
public ModelAndView userInfo(@PathVariable("id") Long id,Model model) {
User user=userRepository.getUserById(id);
model.addAttribute("userList",user);
model.addAttribute("title","查看用户");
return new ModelAndView("users/view","userModel",model);
}
}


报错
Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Wed Mar 07 23:47:52 CST 2018
There was an unexpected error (type=Bad Request, status=400).
Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; nested exception is java.lang.NumberFormatException: For input string: "userlist"



debug日志
2018-03-07 23:47:52.610 DEBUG 7770 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : DispatcherServlet with name 'dispatcherServlet' processing GET request for [/users]
2018-03-07 23:47:52.614 DEBUG 7770 --- [nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Looking up handler method for path /users
2018-03-07 23:47:52.617 DEBUG 7770 --- [nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Returning handler method [public org.springframework.web.servlet.ModelAndView com.guoqing.spring.boot.blog.controller.UserConroller.userList(org.springframework.ui.Model)]
2018-03-07 23:47:52.617 DEBUG 7770 --- [nio-8080-exec-1] o.s.b.f.s.DefaultListableBeanFactory : Returning cached instance of singleton bean 'userConroller'
2018-03-07 23:47:52.617 DEBUG 7770 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Last-Modified value for [/users] is: -1
123
0
2018-03-07 23:47:52.640 DEBUG 7770 --- [nio-8080-exec-1] o.s.w.s.v.ContentNegotiatingViewResolver : Requested media types are [text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8] based on Accept header types and producible media types [*/*])
2018-03-07 23:47:52.640 DEBUG 7770 --- [nio-8080-exec-1] o.s.w.servlet.view.BeanNameViewResolver : No matching bean found for view name 'users/userlist'
2018-03-07 23:47:52.642 DEBUG 7770 --- [nio-8080-exec-1] o.s.b.f.s.DefaultListableBeanFactory : Invoking afterPropertiesSet() on bean with name 'users/userlist'
2018-03-07 23:47:52.643 DEBUG 7770 --- [nio-8080-exec-1] o.s.w.s.v.ContentNegotiatingViewResolver : Returning [org.springframework.web.servlet.view.InternalResourceView: name 'users/userlist'; URL [users/userlist]] based on requested media type 'text/html'
2018-03-07 23:47:52.643 DEBUG 7770 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Rendering view [org.springframework.web.servlet.view.InternalResourceView: name 'users/userlist'; URL [users/userlist]] in DispatcherServlet with name 'dispatcherServlet'
2018-03-07 23:47:52.643 DEBUG 7770 --- [nio-8080-exec-1] o.s.w.servlet.view.InternalResourceView : Added model object 'userList' of type [java.util.ArrayList] to request in view with name 'users/userlist'
2018-03-07 23:47:52.643 DEBUG 7770 --- [nio-8080-exec-1] o.s.w.servlet.view.InternalResourceView : Added model object 'title' of type [java.lang.String] to request in view with name 'users/userlist'
2018-03-07 23:47:52.643 DEBUG 7770 --- [nio-8080-exec-1] o.s.w.servlet.view.InternalResourceView : Added model object 'userModel' of type [org.springframework.validation.support.BindingAwareModelMap] to request in view with name 'users/userlist'
2018-03-07 23:47:52.645 DEBUG 7770 --- [nio-8080-exec-1] o.s.w.servlet.view.InternalResourceView : Forwarding to resource [users/userlist] in InternalResourceView 'users/userlist'
2018-03-07 23:47:52.648 DEBUG 7770 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : DispatcherServlet with name 'dispatcherServlet' processing GET request for [/users/userlist]
2018-03-07 23:47:52.648 DEBUG 7770 --- [nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Looking up handler method for path /users/userlist
2018-03-07 23:47:52.649 DEBUG 7770 --- [nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Returning handler method [public org.springframework.web.servlet.ModelAndView com.guoqing.spring.boot.blog.controller.UserConroller.userInfo(java.lang.Long,org.springframework.ui.Model)]
2018-03-07 23:47:52.650 DEBUG 7770 --- [nio-8080-exec-1] o.s.b.f.s.DefaultListableBeanFactory : Returning cached instance of singleton bean 'userConroller'
2018-03-07 23:47:52.650 DEBUG 7770 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Last-Modified value for [/users/userlist] is: -1
2018-03-07 23:47:52.662 DEBUG 7770 --- [nio-8080-exec-1] .w.s.m.m.a.ServletInvocableHandlerMethod : Failed to resolve argument 0 of type 'java.lang.Long'


查看日志发现在访问localhost:8080/users后已经正确userList方法,但是在返回ModelAndView对象后又根据ModelAndView中的viewName做了一次转发,求教大佬是什么原因导致这种情况出现的?

而且只有在eclipse中启动项目才会出现这种情况,用gradlew bootRun启动就没问题
...全文
974 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
the new object 2020-03-19
  • 打赏
  • 举报
回复
额,我也碰到这个问题了,不管是用RestController 返回ModelAndView,还是使用Controller,返回String都会重新转发请求。我发一个login/index请求,然后modelAndview("main/index")没有跳转到templates/main/index.html,而是直接发送了一个login/templates/main/index.html请求,然后找不到这个请求的handler,就跳转到/error请求了,请问楼主是怎么解决的,thymeleaf有springboot的默认配置,所以前后缀其实都是配好的,spring.mvc.view.prefix和suffix也都试过配置和不配置的情况,但是每次还是会把ModelAndView的视图名称当做一个请求转发出去,有人碰到过吗
小吴先生666 2019-05-22
  • 打赏
  • 举报
回复
楼主可解决了这个问题 Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@75a8b296] was not registered for synchronization because synchronization is not active 16:30:27.651 [http-nio-80-exec-9] DEBUG org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@1e508002] will not be managed by Spring ==> Preparing: select * from shop_infos where shop_name = ? ==> Parameters: 布客联盟书店(String) <== Columns: id, shop_num, stock_id, company_id, shop_name, session_key, company_name, phone, contacts, stock_name, shop_type, shop_pwd, picture_item, shop_picture_table, shop_goods_table, goods_release_table <== Row: 12, 2742837642, 12, 4, 布客联盟书店, 62029236bc858d7eabb8c1053917666ZZ70f9015ef6e0e82742837642, null, null, null, null, null, 995b8c969e62a4c8aff6ef38425b5f92, 1764216596572020108, shop_2742837642_picture, shop_2742837642_goods, goods_release_2742837642 <== Total: 1 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@75a8b296] 16:30:27.669 [http-nio-80-exec-9] DEBUG org.springframework.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource http://account.ose.aliyun.com/login?appKey=68756959&appName=%E5%9B%BE%E4%B9%A6%E4%BA%91%E7%AE%A1%E7%90%86&ati=3058500734045&loginMessage=%E9%99%84%E5%8A%A0%E4%BF%A1%E6%81%AF&loginResult=success&tid=2742837642&time=1558513827676&topAppKey=23643791&userId=2742837642&userIp=0%3A0%3A0%3A0%3A0%3A0%3A0%3A1&sign=98173b94aa5151d866d7b886c49062b1 [YuChengHeLogin] Success.{"result":"success","errMsg":""} 账号密码登录验证------------------------success 16:30:28.077 [http-nio-80-exec-9] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Invoking afterPropertiesSet() on bean with name 'pages/index' 16:30:28.077 [http-nio-80-exec-9] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor#0' 16:30:28.077 [http-nio-80-exec-9] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor' 16:30:28.077 [http-nio-80-exec-9] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0' 16:30:28.077 [http-nio-80-exec-9] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor#0' 16:30:28.078 [http-nio-80-exec-9] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor' 16:30:28.078 [http-nio-80-exec-9] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0' 16:30:28.130 [http-nio-80-exec-9] DEBUG org.springframework.web.servlet.DispatcherServlet - Rendering view [org.springframework.web.servlet.view.JstlView: name 'pages/index'; URL [/WEB-INF/pages/index.jsp]] in DispatcherServlet with name 'aliShopManager' 16:30:28.168 [http-nio-80-exec-9] DEBUG org.springframework.web.servlet.view.JstlView - Forwarding to resource [/WEB-INF/pages/index.jsp] in InternalResourceView 'pages/index' 16:30:28.222 [http-nio-80-exec-9] DEBUG org.springframework.web.servlet.DispatcherServlet - Successfully completed request 16:30:28.225 [http-nio-80-exec-9] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'sqlSessionFactory' 16:30:28.306 [http-nio-80-exec-4] DEBUG org.apache.shiro.web.servlet.SimpleCookie - Found 'SHRIOSESSIONID' cookie value [d8febfa3-7f89-4a07-aa5d-29bd85b50a78] 16:30:28.307 [http-nio-80-exec-4] DEBUG org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'aliShopManager' processing GET request for [/alishop/user/welcome] 16:30:28.307 [http-nio-80-exec-4] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /user/welcome 16:30:28.307 [http-nio-80-exec-4] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Returning handler method [public java.lang.String com.gudi.manage.book.controller.LoginController.welcome()] 16:30:28.307 [http-nio-80-exec-4] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'loginController' 16:30:28.308 [http-nio-80-exec-4] DEBUG org.springframework.web.servlet.DispatcherServlet - Last-Modified value for [/alishop/user/welcome] is: -1 16:30:28.309 [http-nio-80-exec-4] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Invoking afterPropertiesSet() on bean with name 'pages/welcome' 16:30:28.309 [http-nio-80-exec-4] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor#0' 16:30:28.309 [http-nio-80-exec-4] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor' 16:30:28.309 [http-nio-80-exec-4] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0' 16:30:28.309 [http-nio-80-exec-4] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor#0' 16:30:28.309 [http-nio-80-exec-4] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor' 16:30:28.309 [http-nio-80-exec-4] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0' 16:30:28.482 [http-nio-80-exec-4] DEBUG org.springframework.web.servlet.DispatcherServlet - Rendering view [org.springframework.web.servlet.view.JstlView: name 'pages/welcome'; URL [/WEB-INF/pages/welcome.jsp]] in DispatcherServlet with name 'aliShopManager' 16:30:28.483 [http-nio-80-exec-4] DEBUG org.springframework.web.servlet.view.JstlView - Forwarding to resource [/WEB-INF/pages/welcome.jsp] in InternalResourceView 'pages/welcome' 16:30:28.496 [http-nio-80-exec-4] DEBUG org.springframework.web.servlet.DispatcherServlet - Successfully completed request
Stgemu 2018-03-08
  • 打赏
  • 举报
回复
引用 4 楼 x2570799116 的回复:
错误是,没有明确的映射,找不到后端的方法,检查你的方法地址、和Spring的配置试图解析器的配置信息。
看日志后端的方法找到了
Stgemu 2018-03-08
  • 打赏
  • 举报
回复
引用 3 楼 licip 的回复:
我看这个跟你配置的视图解析器有关吧。
视图解析器是用的springboot默认集成的,页面是使用Thymeleaf模板引擎
Stgemu 2018-03-08
  • 打赏
  • 举报
回复
引用 1 楼 u011594442 的回复:
换种写法试试,直接return 返回页面;这种
试过返回string是ok的,可以正确返回视图
  • 打赏
  • 举报
回复
错误是,没有明确的映射,找不到后端的方法,检查你的方法地址、和Spring的配置试图解析器的配置信息。
licip 2018-03-08
  • 打赏
  • 举报
回复
我看这个跟你配置的视图解析器有关吧。
Miracle1216 2018-03-08
  • 打赏
  • 举报
回复
难道不是要转发到ModelAndView指定的页面吗?
Sunyiban 2018-03-08
  • 打赏
  • 举报
回复
换种写法试试,直接return 返回页面;这种

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧