流程:
一、ShopService:
1. addShop(Shop shop, File shopImg):添加店铺,并将店铺与上传的缩略图绑定
1)空值判断,主要判断Shop及其属性值是否为空
2)设置属性初始值
3)添加店铺信息
二、前端
使用SUI Mobile框架,是阿里开发的开源前端框架,可以实现某些组件。
Kaptcha实现验证码
三、前后端联调测试
知识点:
1. assertEquals
2. dto和entity的区别:
dto是数据传输对象。这个对象封装你需要传输的数据 在M,V,C这三个层传递。
可以理解为dto为增强(或经过处理后)的entity,dto是面向用户的,entity是面向数据库的。
比如某个entity对象有20个属性,而我需要向用户展示的只有10个,就可以用dto;
再比如用户添加某一个entity是否成功需要一个状态值,而entity中显然不需要,所以需要dto去进一步“包装”它。
3. 枚举类
4. service层要有事务管理,其中为什么用RuntimeException,而不直接用Exception?
因为只有RuntimeException及其子类在出错时才会回滚,其他的可能会提交。
5. java是值传递:
如果参数是基本类型,传递的是值的拷贝,所以在方法中对其更改不会影响到函数外的结果;
如果是引用数据类型,传递的是堆中地址值的,所以方法中的更改会影响外面。
6. 配置数据库的自增主键(mybatis.xml)
<!--使用jdbc的getGeneratedKeys获取数据库自增主键值-->
<setting name="useGeneratedKeys" value="true"/>
7. CommonsMultipartFile是Spring中文件上传用的
CommonsMultipartFile不能直接转化成File,但是其中有一个getInputStream()方法可以获取其输入流,然后通过编写函数可以将输入流转化成File文件:
调用:
8. @Param注解:
作用是用于传递参数,可以与SQL中的的字段名相对应,在mapper中写sql时#{}中的参数即@Param括号中的参数来获取相应的数据
9. classPath:编译后的classes文件夹(target中的WEB-INF/classes)
遇到的问题:
1. 写IShopDaoTest时,报空指针异常
原因:没有将IShopDao注入,即没有引入Spring配置文件。
解决方法:extends BaseTest,BaseTest中写好配置
2. 测试ShopService时,在ImageUtil中,Thumbnails添加水印时报IO异常:
原因:找不到水印所在文件,之前写的时候是放在src/main/resources中,但是由于现在在test目录下,basePath发生了改变
解决方法:将水印图片复制一份放在sre/test/resources中
3. 在前后端进行交互(ajax),即将店铺类别和区域信息传入的时候,写完之后并没有从后端同步到前端
解决方法:在pom中没有将相应的依赖引入,引入相应jackson依赖即可
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.9</version>
</dependency>
4. 使用Kaptcha实现验证码时,pom中导入不了相关的jar包
解决方法:参考https://blog.csdn.net/qq_35885488/article/details/80902631
下载源码包:http://code.google.com/p/kaptcha/downloads/list
导入到本地的maven仓库中:mvn install:install-file -DgroupId=com.google.code -DartifactId=kaptcha -Dversion=2.3.2 -Dfile=xxx(自己存放该解压后的jar包的路径)/kaptcha-2.3.2.jar -Dpackaging=jar -DgeneratePom=true
注意:在查找这个问题的解决方案时,没有人提到在pom中引入的时候的格式要严格按照你命令中的格式,即
本来应该是:
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
但是由于引入的时候不是按照这个groupId...,所以要按照你引入的路径:
<dependency>
<groupId>com.google.code</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
5. 在前后端联调的时候,后端读不到ajax传过来的数据。
原因:
1.
其中的 shop.phone与Shop实体类中定义的名称不同(Shop 中为shopPhone)
改过之后就好了,但是不知道是不是必须相同
2.
spring-web.xml中必须注册文件上传解析器multipartResolver
添加文件上传的依赖:
3.
ajax中的配置必须是:
后面三个false,其中:
在使用jQuery的$.ajax()方法的时候参数processData默认为true(该方法为jQuery独有的),默认情况下会将发送的数据序列化以适应默认的内容类型application/x-www-form-urlencoded
如果想发送不想转换的的信息的时候需要手动将其设置为false
在我遇到的是传输的是blob对象的时候就是不需要将传输的数据序列化,一般的还有类似DOM树等