原创

评论获取QQ头像


为了让评论区更加直观,可以通过邮箱获取头像(仅限于QQ邮箱)。

这里主要演示邮箱的判断和头像的转换。详细代码可以去我的GitHub了解:查看链接

CommentController.java

package com.beifeng.web.controller;

import com.beifeng.domain.Comment;
import com.beifeng.domain.User;
import com.beifeng.service.CommentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author BeiFeng
 * @version 1.0
 * @date 2020/11/17 22:32
 */
@Controller
public class CommentController {

    @Autowired
    CommentService commentService;

    @Value("${Comment.avatar}")
    private String avatar;


    @PostMapping("/comments")
    public String post(Comment comment, HttpSession session){
        
        comment.setAdminComment(false);
        User user = (User) session.getAttribute("user");
		// 判断是否为管理员评论
        if (user!=null){
            comment.setNickname(user.getNickname());
            comment.setEmail(user.getEmail());
            comment.setAvatar(user.getAvatar());
            comment.setAdminComment(true);
        }else {
            // 判断邮箱是否为qq邮箱
            if (comment.getEmail().trim().toLowerCase().contains("@qq.com")){
                String regEx = "[^0-9]";
                Pattern p = Pattern.compile(regEx);
                Matcher m = p.matcher(comment.getEmail());
                comment.setAvatar("http://q1.qlogo.cn/g?b=qq&nk="+m.replaceAll("").trim()+"&s=100");
            }else {
                // 如果不是正确的qq邮箱,使用默认头像
                comment.setAvatar(avatar);
            }
        }

        commentService.saveComment(comment);

        return "redirect:/comments/" + comment.getBlogId();
    }
}

当用户评论和信息传递过来后,封装到Comment实体类当中。首先判断是否为管理员评论,如果是直接用管理员的头像和昵称。

如果是普通用户评论,首先要判断填写的邮箱是否为QQ邮箱

comment.getEmail().trim().toLowerCase().contains("@qq.com")

首先要把邮箱字符串转换为小写,防止传递过来的字符串是大写的,然后判断后缀即可。

如果是QQ邮箱便获取QQ号码,通过QQ号获取QQ头像。

String regEx = "[^0-9]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(comment.getEmail());
comment.setAvatar("http://q1.qlogo.cn/g?b=qq&nk="+m.replaceAll("").trim()+"&s=100");

Pattern类的作用是编译正则表达式创建一个匹配模式

Matcher类使用Pattern实例提供的匹配模式对正则表达式进行匹配。

Pattern p = Pattern.compile(regEx);

Pattern的构造方法是私有的,不能直接创建,可以通过静态方法compile(String regex)来创建,将定义的正则表达式编译并赋给Pattern类。然后由Matcher对邮箱匹配获取QQ号码。

comment.setAvatar("http://q1.qlogo.cn/g?b=qq&nk="+m.replaceAll("").trim()+"&s=100");

m.replaceAll("")把匹配到的字符串替换,和String的replaceAll()一样;

最后通过QQ提供的接口获取头像即可,s=100 表示获取的头像大小

http://q1.qlogo.cn/g?b=qq&nk=QQ号码&s=100

如果有什么不对的地方,可以在评论区留言哦。

  • 作者:北风(联系作者)
  • 发表时间:2020-12-19 16:22:12
  • 更新时间:2020-12-19 16:22:12
  • 版权声明:自由转载-非商用-非衍生-保持署名
  • 评论

    阿灰
    老哥..想知道评论会有邮箱提醒怎么做到的..
    阿灰
    qq头像??
    阿灰  
    哇哦 ~ 神奇
    路人甲
    测试一下
    评论