为了账号安全,请及时绑定邮箱和手机立即绑定

「小程序JAVA实战」小程序的视频展示页面初始化

进入列表详情,展示点赞状态用户的名称,头像名称。源码:https://github.com/limingios/wxProgram.git 中No.15和springboot

https://img1.sycdn.imooc.com//5dcb697a0001325c12400533.jpg

后台开发

拦截器,不拦截获取视频初始化信息。游客可以直接观看。通过用户id,视频id,视频创建id获取是否点赞视频,并获取创建者的信息。

  • 拦截器

package com.idig8;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import com.idig8.controller.interceptor.MiniInterceptor;@Configurationpublic class WebMvcConfig extends WebMvcConfigurerAdapter {    
    @Value("${server.file.path}")    private String fileSpace;    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {        //资源的路径.swagger2的资源.所在的目录,
        registry.addResourceHandler("/**")
        .addResourceLocations("classpath:/META-INF/resources/")
        .addResourceLocations("file:"+fileSpace);
        
    }    
    @Bean
    public MiniInterceptor miniInterceptor() {        return new MiniInterceptor();
    }    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        
        registry.addInterceptor(miniInterceptor()).addPathPatterns("/user/**")
                       .addPathPatterns("/video/upload", "/video/uploadCover","/video/userLike","/video/userUnLike")
                                                  .addPathPatterns("/bgm/**")
                                                  .excludePathPatterns("/user/queryPublisher");        
        super.addInterceptors(registry);
    }

}

https://img1.sycdn.imooc.com//5dcb697a000121c412400726.jpg

UserController.java

package com.idig8.controller;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.BeanUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;import com.idig8.pojo.Users;import com.idig8.pojo.vo.PublisherVideo;import com.idig8.pojo.vo.UsersVO;import com.idig8.service.UserService;import com.idig8.utils.JSONResult;import com.idig8.utils.file.FileUtil;import io.swagger.annotations.Api;import io.swagger.annotations.ApiImplicitParam;import io.swagger.annotations.ApiImplicitParams;import io.swagger.annotations.ApiOperation;import io.swagger.annotations.ApiParam;@RestController@Api(value="用户接口",tags={"用户的controller"})@RequestMapping(value = "/user")public class UserController extends BasicController{    
    @Autowired
    private UserService userService;    
    @Value("${server.file.path}")    private String fileSpace;    
    @ApiOperation(value="用户上传头像",notes="用户上传头像的接口")    @ApiImplicitParams({        @ApiImplicitParam(name="userId",value="用户id",required=true,dataType="String",paramType="query"),
    })    @PostMapping(value="/uploadFace",headers="content-type=multipart/form-data")    public JSONResult uploadFace(String userId,@ApiParam(value="图片",required=true) MultipartFile file) {        if (StringUtils.isBlank(userId)) {            return JSONResult.errorMsg("用户id不能为空...");
        }        
        // 文件保存的命名空间
        String fileName = file.getOriginalFilename();        // 保存到数据库中的相对路径
        String path = "";         try {
             path = FileUtil.uploadFile(file.getBytes(), fileSpace, fileName);
            } catch (Exception e) {
                e.getStackTrace();                return JSONResult.errorMsg(e.getMessage());
            }
         
         Users user = new Users();
         user.setId(userId);
         user.setFaceImage(path);
         userService.updateUser(user);        
    
        return JSONResult.ok(path);
    }    
    @ApiOperation(value="通过用户Id获取用户信息",notes="通过用户Id获取用户信息的接口")    @ApiImplicitParam(name="userId",value="用户id",required=true,dataType="String",paramType="query")    @PostMapping("/queryByUserId")    public JSONResult queryByUserId(String userId) {        if (StringUtils.isBlank(userId)) {            return JSONResult.errorMsg("用户id不能为空...");
        }
        
        Users user = userService.queryUserId(userId);
        UsersVO usersVO= new UsersVO();
        BeanUtils.copyProperties(user, usersVO);        
    
        return JSONResult.ok(usersVO);
    }    
    @PostMapping("/queryPublisher")    public JSONResult queryPublisher(String loginUserId, String videoId, 
            String publishUserId) throws Exception {        
        if (StringUtils.isBlank(publishUserId)) {            return JSONResult.errorMsg("");
        }        
        // 1. 查询视频发布者的信息
        Users userInfo = userService.queryUserInfo(publishUserId);
        UsersVO publisher = new UsersVO();
        BeanUtils.copyProperties(userInfo, publisher);        
        // 2. 查询当前登录者和视频的点赞关系
        boolean userLikeVideo = userService.isUserLikeVideo(loginUserId, videoId);
        
        PublisherVideo bean = new PublisherVideo();
        bean.setPublisher(publisher);   
        bean.setUserLikeVideo(userLikeVideo);        
        return JSONResult.ok(bean);
    }
    

}

https://img1.sycdn.imooc.com//5dcb697b00017d2a09980482.jpg

  • service 和 serviceImp

package com.idig8.service;import com.idig8.pojo.Users;public interface UserService {    /**
     * 判断用户名是否存在
     * @param username
     * @return
     */
    public boolean queryUsernameIsExist(String username);    
    /**
     * 保存用户
     * @param user
     * @return
     */
    public void saveUser(Users user);    
    /**
     * 查询用户对象
     * @param username
     * @return
     */
    public Users queryUserIsExist(Users user);    
    /**
     * 更新对象
     * @param username
     * @return
     */
    public void updateUser(Users user);    
    
    /**
     * userId查询用户对象
     * @param username
     * @return
     */
    public Users queryUserId(String userId);    
    /**
     * 查询用户信息
     */
    public Users queryUserInfo(String userId);    
    /**
     * 查询用户是否喜欢点赞视频
     */
    public boolean isUserLikeVideo(String userId, String videoId);
    
}
package com.idig8.service.Impl;import java.util.List;import org.apache.commons.lang3.StringUtils;import org.n3r.idworker.Sid;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Transactional;import com.idig8.mapper.UsersLikeVideosMapper;import com.idig8.mapper.UsersMapper;import com.idig8.pojo.Users;import com.idig8.pojo.UsersLikeVideos;import com.idig8.service.UserService;import com.idig8.utils.MD5Utils;import tk.mybatis.mapper.entity.Example;import tk.mybatis.mapper.entity.Example.Criteria;@Servicepublic class UserServiceImpl implements UserService {    @Autowired
    private UsersMapper usersMapper;    
    @Autowired
    private UsersLikeVideosMapper usersLikeVideosMapper;    
    @Autowired
    private UsersMapper userMapper;    
    @Autowired
    private Sid sid;    
    @Transactional(propagation =Propagation.SUPPORTS)    @Override
    public boolean queryUsernameIsExist(String username) {
        Users user = new Users();
        user.setUsername(username);
        Users result = usersMapper.selectOne(user);        return result==null? false:true;
    }    @Transactional(propagation =Propagation.REQUIRED)    @Override
    public void saveUser(Users user) {
        String userId =sid.nextShort();
        user.setId(userId);
        usersMapper.insert(user);
    }    @Transactional(propagation =Propagation.SUPPORTS)    @Override
    public Users queryUserIsExist(Users user) {
        Example queryExample = new Example(Users.class);
        Criteria criteria = queryExample.createCriteria();
        criteria.andEqualTo("username",user.getUsername());        try {
            criteria.andEqualTo("password",MD5Utils.getMD5Str(user.getPassword()));
        } catch (Exception e) {            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Users userOne =  usersMapper.selectOneByExample(queryExample);        return userOne;
    }    
    @Transactional(propagation =Propagation.REQUIRED)    @Override
    public void updateUser(Users user) {
        
        Example userExample = new Example(Users.class);
        Criteria criteria = userExample.createCriteria();
        criteria.andEqualTo("id", user.getId());
        usersMapper.updateByExampleSelective(user, userExample);
    }    
    @Transactional(propagation =Propagation.SUPPORTS)    @Override
    public Users queryUserId(String userId){
        Example queryExample = new Example(Users.class);
        Criteria criteria = queryExample.createCriteria();
        criteria.andEqualTo("id",userId);
        Users userOne =  usersMapper.selectOneByExample(queryExample);        return userOne;
    }    
    @Transactional(propagation = Propagation.SUPPORTS)    @Override
    public Users queryUserInfo(String userId) {
        Example userExample = new Example(Users.class);
        Criteria criteria = userExample.createCriteria();
        criteria.andEqualTo("id", userId);
        Users user = userMapper.selectOneByExample(userExample);        return user;
    }    @Transactional(propagation = Propagation.SUPPORTS)    @Override
    public boolean isUserLikeVideo(String userId, String videoId) {        if (StringUtils.isBlank(userId) || StringUtils.isBlank(videoId)) {            return false;
        }
        
        Example example = new Example(UsersLikeVideos.class);
        Criteria criteria = example.createCriteria();
        
        criteria.andEqualTo("userId", userId);
        criteria.andEqualTo("videoId", videoId);
        
        List<UsersLikeVideos> list = usersLikeVideosMapper.selectByExample(example);        
        if (list != null && list.size() >0) {            return true;
        }        
        return false;
    }

}

小程序修改

  • videoInfo.js

var videoUtils = require('../../utils/videoUtils.js')const app = getApp()
Page({  data: {    cover:'cover',    videoContext:"",    videoInfo:{},    videId:'',    src:'',    userLikeVideo:false,    serverUrl:'',    publisher:[]
  },  

  showSearch:function(){
    wx.navigateTo({      url: '../videoSearch/videoSearch',
    })
  },  onLoad:function(params){    var me = this;
    me.videoContext = wx.createVideoContext('myVideo', me);    var videoInfo = JSON.parse(params.videoInfo);    var videoWidth = videoInfo.videoWidth;    var videoHeight = videoInfo.videoHeight;    var cover = 'cover';    if (videoWidth > videoHeight){
      cover = '';
    }
    me.setData({      videId: videoInfo.id,      src: app.serverUrl + videoInfo.videoPath,      videoInfo: videoInfo,      cover: cover
    })    var serverUrl = app.serverUrl;    var user = app.getGlobalUserInfo();    var loginUserId = "";    if (user != null && user != undefined && user != '') {
      loginUserId = user.id;
    }
    wx.request({      url: serverUrl + '/user/queryPublisher?loginUserId=' + loginUserId + "&videoId=" + videoInfo.id + "&publishUserId=" + videoInfo.userId,      method: 'POST',      success: function (res) {        console.log(res.data);        var publisher = res.data.data.publisher;        var userLikeVideo = res.data.data.userLikeVideo;

        me.setData({          serverUrl: serverUrl,          publisher: publisher,          userLikeVideo: userLikeVideo
        });
      }
    })




  },  showIndex:function(){
    wx.redirectTo({      url: '../index/index',
    })
  },  onShow:function(){    var me = this;
    me.videoContext.play();
  },  onHide:function(){    var me = this;
    me.videoContext.pause();
  },  upload:function(){ 
    var me = this;    var userInfo = app.getGlobalUserInfo();    var videoInfo = JSON.stringify(me.data.videoInfo);    var realUrl = '../videoInfo/videoInfo#videoInfo@' + videoInfo;    if (userInfo.id == '' || userInfo.id == undefined) {
      wx.navigateTo({        url: '../userLogin/userLogin?realUrl=' + realUrl,
      })
    } else {
      videoUtils.uploadVideo();
    }


  },  showMine: function () {    var me = this;    var userInfo = app.getGlobalUserInfo();    var videoInfo = JSON.parse    if (userInfo.id == '' || userInfo.id == undefined){
      wx.navigateTo({        url: '../userLogin/userLogin',
      })
    }else{
      wx.navigateTo({        url: '../mine/mine',
      })
    }
    
   
  },  likeVideoOrNot: function () {    var me = this;    var userInfo = app.getGlobalUserInfo();    var videoInfoStr = JSON.stringify(me.data.videoInfo);    var realUrl = '../videoInfo/videoInfo#videoInfo@' + videoInfoStr;    if (userInfo.id == '' || userInfo.id == undefined) {
      wx.navigateTo({        url: '../userLogin/userLogin?realUrl=' + realUrl,
      })
    } else {      var videoInfo = me.data.videoInfo;      var userLikeVideo = me.data.userLikeVideo;      var url = "/video/userLike?userId=" + userInfo.id + "&videoId=" + videoInfo.id + "&videoCreaterId=" + userLikeVideo.userId;      if (userLikeVideo){        var url = "/video/userUnLike?userId=" + userInfo.id + "&videoId=" + videoInfo.id + "&videoCreaterId=" + userLikeVideo.userId;
      }
      wx.showLoading({        title: '....',
      })
      wx.request({        url: app.serverUrl + url,        method: "POST",        header: {          'content-type': 'application/json', // 默认值
          'headerUserId': userInfo.id,          'headerUserToken': userInfo.userToken
        },        success: function (res) {
          wx.hideLoading();
          me.setData({            userLikeVideo: !userLikeVideo,
          })
        }
      })

    }


  }
})

PS:拦截器excludePathPatterns可以不拦截,分析业务,那些需要登录后才可以获得,那些不需要登录就可以看到。


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
1.7万
获赞与收藏
1318

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消