返回一个ModelAndView时,竟然根据ModelAndView中设置的viewName自动转发了,然后触发了另外一个方法,由于入参类型不对导致了报错
访问路径是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启动就没问题