您的位置:首页 > 移动开发 > 微信开发

基于java的微信小程序的实现(四)用户个人信息相关接口开发

2018-11-29 20:24 1071 查看
版权声明:lex https://blog.csdn.net/qq_36258498/article/details/84639340

文章目录

  • 2.用户上传头像接口开发
  • 3.创建一个类继承WebMvcConfigurerAdapter,做虚拟目录的配置
  • 4.编写controller代码
  • 5.编写service层的用户更新操作的代码
  • 1.查询用户个人信息接口开发

    1.需求分析

    需要通过前端传来的用户的userid去数据库中进行查询,并将查询到的对象封装为usersVo返回给前端

    dao层代码

    public interface UsersDao extends JpaRepository<Users,String> {
    }

    service层代码

    /**
    * 根据用户id返回查询用户信息并返回
    * @param id
    * @return
    */
    @Override
    public Users findUserInfo(String id) {
    return usersDao.findOne(id);
    }

    controller层代码

    @ApiOperation(value = "用户信息查询", notes = "用户信息查询的接口")
    @PostMapping("/findUserInfo")
    public LexJSONResult findUserInfo(String id){
    Users users= userService.findUserInfo(id);
    UsersVo usersVo=new UsersVo();
    //使用BeanUtils工具类将users的信息复制到usersVo中
    BeanUtils.copyProperties(users,usersVo);
    return LexJSONResult.ok(usersVo);
    }

    2.用户上传头像接口开发

    1.需求分析

    用户在小程序端点击头像上传后调用头像上传接口,在这之前需要定义一个拦截器对用户登录状态进行判断,如果当前有用户使用工具恶意掉用该接口则会让服务器端出现错误,所以需要在这里让前端将用户的id和token数据放在请求的header中,通过拦截器的解析来确定是否放行,如果验证通过则进行头像的上传,并实现头像图片的回显,这里则需要在springMVC中配置一个虚拟目录。

    2.定义一个拦截器类

    public class Intercepto implements HandlerInterceptor {
    /**
    * 拦截请求 在controller之前
    * @param httpServletRequest
    * @param httpServletResponse
    * @param o
    * @return
    * @throws Exception
    */
    @Autowired
    private RedisOperator redisOperator;
    public final String USERSESSIONID="user-session-id";
    
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
    
    String userId = httpServletRequest.getHeader("userId");
    String userToken=httpServletRequest.getHeader("userToken");
    if (!StringUtils.isEmpty(userId)&& !StringUtils.isEmpty(userToken)){
    //            System.out.println("不为空");
    String token = redisOperator.get(USERSESSIONID + ":" + userId);
    if (StringUtils.isEmpty(token)){
    returnErrorResponse(httpServletResponse,new LexJSONResult().errorTokenMsg("用户信息已经过期,请重新登录"));
    System.out.println("用户信息已经过期,请重新登录");
    return false;
    }
    else if (!token.equals(userToken)){
    returnErrorResponse(httpServletResponse,new LexJSONResult().errorTokenMsg("该账号已经登录"));
    System.out.println("该账号已经登录");
    return false;
    }else {
    return true;
    }
    }else {
    returnErrorResponse(httpServletResponse,new LexJSONResult().errorTokenMsg("你还没有登录,请登录"));
    System.out.println("请登录");
    return false;
    }
    }
    
    public void returnErrorResponse(HttpServletResponse response, LexJSONResult result)
    throws IOException, UnsupportedEncodingException {
    OutputStream out=null;
    try{
    response.setCharacterEncoding("utf-8");
    response.setContentType("text/json");
    out = response.getOutputStream();
    out.write(JsonUtils.objectToJson(result).getBytes("utf-8"));
    out.flush();
    } finally{
    if(out!=null){
    out.close();
    }
    }
    }
    
    /**
    * 请求controller后 页面渲染前
    * @param httpServletRequest
    * @param httpServletResponse
    * @param o
    * @param modelAndView
    * @throws Exception
    */
    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
    
    }
    
    /**
    * 最后
    * @param httpServletRequest
    * @param httpServletResponse
    * @param o
    * @param e
    * @throws Exception
    */
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
    
    }
    }

    3.创建一个类继承WebMvcConfigurerAdapter,做虚拟目录的配置

    @Configuration
    public class WebMvc extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    //这里是对swagger2的静态页面资源进行添加
    registry.addResourceHandler("/**")
    .addResourceLocations("classpath:/META-INF/resources/")
    //对应的服务器端存放文件的目录
    .addResourceLocations("file:F:/file/");
    }
    
    @Bean
    public Intercepto intercepto(){
    return new Intercepto();
    }
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(intercepto())
    .addPathPatterns("/user/**")
    .addPathPatterns("/video/uploadVideo")
    .addPathPatterns("/video/saveComments")
    ;
    
    }
    }

    4.编写controller代码

    关于用户相关的操作,把它写在UserController中,创建一个新的controller

    @Autowired
    private UserService userService;
    
    @ApiOperation(value = "用户头像上传", notes = "用户头像上传的接口")
    @PostMapping("/upload")
    public LexJSONResult upload(String id, @RequestParam("file") MultipartFile[] file) throws IOException {
    if (StringUtils.isEmpty(id)){
    return LexJSONResult.errorMsg("id不能为空");
    }
    //创建一个文件输出流对象
    FileOutputStream fileOutputStream=null;
    //创建一个输入流对象
    InputStream inputStream=null;
    //文件的命名空间
    String fileSpace="F:/file";
    //文件保存的相对路径
    String upLoadPathDb="/"+id+"/face";
    try {
    //判断传入的文件是否为空
    if (file!=null && file.length>0){
    //获取到传入的文件名称
    String filename = file[0].getOriginalFilename();
    //判断该文件名是否为空
    if (!StringUtils.isEmpty(filename)){
    //获得该文件的绝对路径
    String finalPath=fileSpace+upLoadPathDb+"/"+filename;
    //获得该文件存入数据库的相对路径
    upLoadPathDb=upLoadPathDb+"/"+filename;
    File f=new File(finalPath);
    if (f.getParentFile()!=null || !f.getParentFile().isDirectory()){
    //创建该文件所在目录的文件夹
    f.getParentFile().mkdirs();
    }
    fileOutputStream=new FileOutputStream(f);
    inputStream=file[0].getInputStream();
    IOUtils.copy(inputStream,fileOutputStream);
    Users u=new Users();
    u.setId(id);
    u.setFaceImage(upLoadPathDb);
    //将用户id和头像相对路径传入,调用更新方法
    userService.updateUserInfo(u);
    }
    }
    }catch (Exception e){
    e.printStackTrace();
    }finally {
    if (fileOutputStream!=null){
    fileOutputStream.flush();
    fileOutputStream.close();
    }
    }
    //将文件的相对路径返回给前端,用来做头像的回显
    return LexJSONResult.ok(upLoadPathDb);
    }

    5.编写service层的用户更新操作的代码

    /**
    * 用户更新操作,将用户的头像存储的相对路径保存到数据
    * @param users
    */
    @Override
    @Transactional
    public void updateUserInfo(Users users) {
    Users one = usersDao.findOne(users.getId());
    one.setFaceImage(users.getFaceImage());
    usersDao.save(one);
    
    }
    阅读更多
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐