up:: 配置邮箱授权码

说明: 本小节呢,我们将会去开发发送邮件的服务。

类的字段添加过程

找到generatorConfig.xml文件

给我们的这个 user 类加一个字段,看到我们现在 user 类在这里面的是没有email字段的,因为我们之前的没有用到email,但是现在我们需要eamil,所以呢,需要给它增加这个字段,首先呢,就来到我们这个mybatis的一个配置类

说明: 关于generatorConfig.xml文件请查看博客项目初始化创建SpringBoot项目(必看)

前面没太弄明白generatorConfig.xml文件的用途,此处加深了理解 此文件是mybatis-generator用来生成对应的mapper文件和xml文件。

前往数据库imooc_mall_user添加Email字段

记得保存!!!!

加上字段后就可以重新运行形成新的pojo类

注意: 那这个时候我跟小伙伴介绍一下,当你有某个字段有更改的时候,你要去注意一些事情,首先来到这个UserMapper, 前面的这是自动生成的,但是后面这两个呢是自己写的,那这个时候如果你不去提前把这个代码给复制出来话,你会发现了,过一会儿,也就是我们重新去生成,你会发现相关的这个方法会被覆盖掉,为了避免这个情况,我们需要提前复制出去,相当于是找地方把它给保存起来。

因为我们前面的generatorConfig.xml文件里只留下User表,其余都注释掉啦,所以不会在其他mapper和xml文件重新生成,我们只需要管我们的user表即可。

与此同时,对应的userMapper.xml里的对应文件也要提前复制出去

重要: 我们复制出去好后需要把这个文件删除!删除!删除!,因为不删除执行mybatis-generator插件会以追加方式在文件后面生成,造成语句重复,从而报错,所以最好删除文件,再继续生成。

然后执行mybatis-generator插件

重新生成,查看User.java文件

然后将复制出来的mapper和xml复制回去

字段增加和删除也是比较常见的开发中会遇到的一个开发工作,我们以后就可以采用类似方式去做好下。

正式开发注册邮箱

添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>2.3.4.RELEASE</version>
</dependency>

测试发送邮件

1.打开userController层,添加接口发送email

 
/**
 * 发送邮件
 */
@PostMapping("/user/sendEmail")
@ResponseBody
public ApiRestResponse sendEmail(@RequestParam("emailAddress") String emailAddress)
        throws ImoocMallException {
    //检查邮件地址是否有效,检查是否已注册
    boolean validEmailAddress = EmailUtil.isValidEmailAddress(emailAddress);
    if (validEmailAddress) {
 
    } else {
        return ApiRestResponse.error(ImoocMallExceptionEnum.WRONG_EMAIL);
    }
}

说明:

2.新建EmailUtil工具类对email进行校验

package com.imooc.mall.utils;
 
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
 
/**
 * 描述:     Email工具
 */
public class EmailUtil {
 
    public static boolean isValidEmailAddress(String email) {
        boolean result = true;
        try {
            InternetAddress internetAddress = new InternetAddress(email);
            internetAddress.validate();
        } catch (AddressException e) {
            e.printStackTrace();
            result = false;
        }
        return result;
    }
 
 
}

说明:

我们看看内部的校验方法,没必要去写,一方面是重复造轮子,一方面是写不了这们全面,最多就是检查格式或者空格

3.抛出错误