SpringMVC整合:遇到的那些坑

本文针对Spring MVC在实际应用过程中常见的错误进行了详细的分析,包括Bean不存在、参数接收类型错误、页面报500错误等问题,并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Bean不存在

在这里插入图片描述

步骤

  1. 查看这个bean是否注入成功 ok
    在这里插入图片描述

  2. Junit单元测试,看我们代码能否查询出结果 查询ok

    在这里插入图片描述

  3. 问题 不在底层,一定是spring出了问题

  4. SpringMVC 在整合的时候没有调用到我们的Service层的bean:

    1.spring-config.xml 没有注入bean

    2.web.xml 中我们也绑定过配置文件,发现问题,我们绑定的是 springmvc-config.xml 
    	这里面确实没有service bean 所以报错
    

    在这里插入图片描述


## 参数‘bookID’未找到
类型异常报告

消息请求处理失败;嵌套异常为org.mybatis.Spring.MyBatisSystemException:嵌套异常为org.apache.ibatis.binding.BindingException:参数‘bookID’未找到。可用的参数是[参数1,bookid]

描述服务器遇到一个意外的情况,阻止它完成请求.

例外情况

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'bookID' not found. Available parameters are [param1, bookid]
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)

原因是 BookMapper接口中 把id 转换成 bookid了 所以 BookMapper.xml中
找不到BookID 只有 bookid ,把bookid改成BookID即可
在这里插入图片描述
在这里插入图片描述

接收参数类型错误

在这里插入图片描述
如果一定要使用基本数据类型,在参数前面添加

@RequestParam(value = "bookID",defaultValue = "0")

如:

//删除书籍
    @RequestMapping("/deleteBook")
    public String DeleteBook(@RequestParam(value = "bookID",defaultValue = "0") int id, Model model){

        //bookService.deleteBookById(bookID);
        System.out.println("DeleteBook=>"+id);

        return "redirect:/book/allBook";
    }

## 页面报500错误:Don't know how to iterate over supplied "items" in <forEach>

注意:jsp使用foreach遍历后端传递的list数据
在这里插入图片描述

这里直接返回Books对象,所以会报上述错误
在这里插入图片描述

There is no getter for property named ‘bookName’ in ‘class java.lang.String’

报错是指:属性名称缺少getter方法

根本原因。

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'bookName' in 'class java.lang.String'
	org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:78)
	org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)
	com.sun.proxy.$Proxy450.selectList(Unknown Source)
	org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223)
	org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:144)
	org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:77)
	org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58)
	com.sun.proxy.$Proxy451.queryLikeNameBook(Unknown Source)
	com.kuang.service.BookServiceImpl.queryLikeNameBook(BookServiceImpl.java:46)
	com.kuang.controller.BookController.updateBook(BookController.java:79)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:498)
	org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
	org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
	org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
	org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)

在Mapper接口方法参数的前面写上@Param(“参数名”),表示给参数命名,名称就是括号中的内容

//根据名字模糊搜索
    List<Book> queryLikeNameBook(@Param("bookName") String bookName);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值