第一个坑
java.lang.NullPointerException
at com.cj.service.UserService.delete(UserService.java:34)
at com.cj.controller.UserController.delete(UserController.java:36)
…
删除的时候直接全删了。。。
@PostMapping("/delete")
@ResponseBody
public Map<String,Object> delete(String ids){
int result = userService.delete(ids);
if(result<=0){
return MapController.getInstance().error().getMap();
}
return MapController.getInstance().success().getMap();
}
@PostMapping("/delete/{id}")
@ResponseBody
public Map<String ,Object> delete(@PathVariable("id") Integer id){
int result = userService.delete(id);
if(result <= 0) {
return MapController.getInstance().error().getMap();
}
return MapController.getInstance().success().getMap();
}
源码的删除是通过Id删除的。看了别人的博客,一般是Mapper映射文件出错,
发现是自己的xml配置文件出错了。
<delete id="delete">
delete from tb_user
<include refid="UserFindCriteria" />
</delete>
少了一行判断id的映射语句,所以报了java.lang.NullPointerException
空指针异常,添加之后完美解决。
第二个坑
没有在spring-mvc中配置转换器,导致用postman发送请求的时候报 500 ,
No converter found for return value of type
首先需要导入两个包
<!--spring将Map转为json对象的时依赖的两个包-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
然后在spring-mvc.xml中添加一下语句
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<!-- 以下是时间格式的转换-->
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
</bean>
</property>
</bean>
</property>
<!-- 以上是时间格式的转换-->
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
完美解决
第三坑
Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'and user_name = ‘alter’
SQL语句错了,于是又跑回去看Mapper的xml文件
细看一下,发现赋值粘贴粗心了,update操作判断都加入and,导致update更新失败,
修改xml文件的语句,post,成功发送请求。nice。
写在最后
如果启动 tomcat 的时候发现 dao 层下的Mapper文件没有加载的 classes 文件里,如下图
用 maven 搭建的项目
那么就需要到 pom.xml 里添加如下语句
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
<finalName>student_study</finalName>
</build>
每次编译的时候都重新编译配置文件,不然每次 去maven 里面 clean 一下还是挺麻烦的。
解释:
**/
表示多级路径下,/*.xml
表示以.xml
结尾的文件 ,如果是 /
表示的是从根目录开始。./
当前目录下 ,../
上一个目录下的文件。
如果配置拦截器的时候/*
和/
是不一样的,前者是拦截所有,后者是拦截除了以.jsp结尾的文档。