SpringMvc配置后,只能返回ModelAndView类型
使用SpringMvc时,在配置文件配置了
<mvc:annotation-driven/>
<mvc:default-servlet-handler/>
在@Controller中只能使用ModelAndView类型的方法,不能使用String、Object、Map<String, Object>等作为方法的参数类型。
在return时会出现如下错误:
java.lang.NoSuchMethodError: org.springframework.core.MethodParameter.getContainingClass()Ljava/lang
/Class;
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.support
sReturnType(RequestResponseBodyMethodProcessor.java:83)
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.getReturnValueHa
ndler(HandlerMethodReturnValueHandlerComposite.java:83)
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValu
e(HandlerMethodReturnValueHandlerComposite.java:69)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHan
dle(ServletInvocableHandlerMethod.java:122)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleM
ethod(RequestMappingHandlerAdapter.java:749)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInterna
l(RequestMappingHandlerAdapter.java:689)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMe
thodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290
)
............
下面贴上相关代码
springmvc.xml:
<mvc:annotation-driven/>
<mvc:default-servlet-handler/>
<!-- 配置自动扫描的包 spring注解 -->
<context:component-scan base-package="*"></context:component-scan>
<context:component-scan base-package="com.json" />
<!-- 配置视图解析器 如何把handler方法返回值解析为实际的物理视图 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
controller:正确实例
@Controller
@RequestMapping(value="/system")
public class SysController {
@RequestMapping("/error")
public ModelAndView hello(HttpServletRequest request){
String msg = request.getParameter("msg");
ModelAndView av = new ModelAndView();
av.addObject("msg",msg);
av.setViewName("/sys/error");
return av;
}
方法修饰为ModelAndView 则return正常 不会报错
controller:错误实例
@Controller
@RequestMapping(value="shiro")
public class TestShiroController {
@RequestMapping(value="/testShiro",method=RequestMethod.POST,
produces = "application/json;charset=utf-8")
@ResponseBody
public Map<String, Object> testShiro(User user){
Map<String, Object> map = new HashMap<String, Object>();
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(),
user.getPassword());
try {
subject.login(token);
} catch (Exception e) {
map.put("msg", e.getMessage());
return map;
}
map.put("msg", "登录成功");
return map;
}
方法修饰为Map,return报错,错误信息如上.同样,参数类型为String、Object,会出现和Map同样的错误.
如果将SpringMvc的配置文件中
springmvc.xml:
<!-- <mvc:annotation-driven/> -->
<!-- <mvc:default-servlet-handler/> -->
<!-- 配置自动扫描的包 spring注解 -->
<context:component-scan base-package="*"></context:component-scan>
<context:component-scan base-package="com.json" />
<!-- 配置视图解析器 如何把handler方法返回值解析为实际的物理视图 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<mvc:annotation-driven/>处的两行注释掉,则String、Object修饰的方法都可以正常return
百度了上面查了,说是jar包冲突,删除冲突的jar包试过了,不生效.
不知道有没有大佬出现过我这种情况,在线等......