首页 > 其他分享 >10.用户资料管理(查询和修改)

10.用户资料管理(查询和修改)

时间:2022-10-30 12:26:10浏览次数:53  
标签:10 用户 private 查询 token tanhua import com id

用户资料管理(查询和修改)

一、查询

/**
*

  • 根据用户id查询UserInfo
  • 1.请求路径:/users
  • 2.请求参数:请求头的Authorization:token(必须),用户id:userID(非必须)
  • 3.响应数据:UserInfo
    */

1.1 QueryUserinfoController(表现层)

package com.tanhua.server.controller;

import com.tanhua.commons.utils.JwtUtils;
import com.tanhua.model.domain.UserInfo;
import com.tanhua.model.domain.vo.UserInfoVo;
import com.tanhua.server.service.QueryUserInfoService;
import io.jsonwebtoken.Claims;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class QueryUserinfoController {


    @Autowired
    private QueryUserInfoService service;


    /**
     *根据id查询用户详细信息
     * 1.请求路径:/users
     * 2.请求方式:post
     * 3.请求参数:请求头中的token,或则传过来的用户id
     * 4.响应结果:UserInfo
     *
     *
     */
    @GetMapping
    public ResponseEntity  queryUserINfoById(@RequestHeader("Authorization") String token,Long userId){
        //1.校验token合法性
        boolean verifyToken = JwtUtils.verifyToken(token);
        if(!verifyToken){
            return ResponseEntity.status(401).body(null);
        }
        //2.获取token中携带的用户id
        Claims claims = JwtUtils.getClaims(token);
        Integer id = (Integer) claims.get("id");
        if(userId == null){
            userId=Long.valueOf(id);
        }

        //3.调用业务层完成信息查询
        UserInfoVo userInfoVo = service.queryByid(userId);

        return ResponseEntity.ok(userInfoVo);
    }


   

1.2QueryUserInfoService(业务层)

package com.tanhua.server.service;

import com.tanhua.dubbo.api.UserInfoApi;
import com.tanhua.model.domain.UserInfo;
import com.tanhua.model.domain.vo.UserInfoVo;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

@Service
public class QueryUserInfoService {

    @DubboReference
    private UserInfoApi userInfoApi;


    /**
     * 根据id查询用户详情信息
     * @param id
     * @return
     */
    public UserInfoVo queryByid(Long id){
        UserInfo userInfo = userInfoApi.queryUserInfo(id);

        UserInfoVo userInfoVo = new UserInfoVo();
        BeanUtils.copyProperties(userInfo, userInfoVo);//属性拷贝,同名同类型
        //对UserInfo的age做一个非空校验
        if(userInfo.getAge() != null){
            userInfoVo.setAge(userInfo.getAge().toString());
        }

        return userInfoVo;
    }

1.3UserInfoVo

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserInfoVo implements Serializable {

    private Long id; //用户id
    private String nickname; //昵称
    private String avatar; //用户头像
    private String birthday; //生日
    private String gender; //性别
    private String age; //年龄
    private String city; //城市
    private String income; //收入
    private String education; //学历
    private String profession; //行业
    private Integer marriage; //婚姻状态
}

二、修改

2.1表现层

package com.tanhua.server.controller;

import com.tanhua.commons.utils.JwtUtils;
import com.tanhua.model.domain.UserInfo;
import com.tanhua.model.domain.vo.UserInfoVo;
import com.tanhua.server.service.QueryUserInfoService;
import io.jsonwebtoken.Claims;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class QueryUserinfoController {


    @Autowired
    private QueryUserInfoService service;

    /**
     *
     * 修改用户详情:
     * 1.请求路径:/users
     * 2.请求参数:请求头中的token,以及UserInfo
     * 3.响应数据:无
     */
    @PutMapping
    public  ResponseEntity  updateUserInfo(@RequestHeader("Authorization") String token,
                                           @RequestBody UserInfo userInfo){


        //1.校验token合法性
        boolean verifyToken = JwtUtils.verifyToken(token);
        if(!verifyToken){
            return ResponseEntity.status(401).body(null);
        }
        //2.解析token获取里面的数据id
        Claims claims = JwtUtils.getClaims(token);
        Integer id = (Integer) claims.get("id");
        //3.把token里面的userid设置给UserInfo
        userInfo.setId(Long.valueOf(id));
        //4.调用业务层完成数据修改


        service.updateUserInfo(userInfo);
        return ResponseEntity.status(401).body(null);

    }
}

2.2业务层

package com.tanhua.server.service;

import com.tanhua.dubbo.api.UserInfoApi;
import com.tanhua.model.domain.UserInfo;
import com.tanhua.model.domain.vo.UserInfoVo;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

@Service
public class QueryUserInfoService {

    @DubboReference
    private UserInfoApi userInfoApi;


    /**
     * 根据用户id修改信息
     * @param userInfo
     */
    public void updateUserInfo(UserInfo userInfo) {
        userInfoApi.updateUserInfo(userInfo);
    }
}

标签:10,用户,private,查询,token,tanhua,import,com,id
From: https://www.cnblogs.com/zhangdashuaige/p/16840938.html

相关文章

  • 9.完善用户信息和上传头像
    完善用户信息和上传头像一、完善用户信息/***完善用户信息:表现层*请求路径:/user/loginReginfo*请求方式:post*请求参数:Headers(请求头):token;Body(请求体):UserInfo......
  • 5.用户手机验证码登录
    用户手机验证码登录一、yapi接口文档二、代码实现1.服务提供者1.1在tanhua-dubbo-db模块创建Mapper接口com/tanhua/dubbo/mappers/UserMapper.java(数据层,查询数据库)p......
  • 1040 有几个PAT
    题目:字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第2位(P),第4位(A),第6位(T);第二个 PAT 是第3位(P),第4位(A),第6位(T)。 现给定字符串,问一......
  • P2971 [USACO10HOL]Cow Politics G
    题意一个树上每一个点都有一个组别,求相同组别的点对相差的最大距离。分析首先对于任意一个组别,深度最大的点一定在答案的点对里。证明假设答案的点对里没有深度最大......
  • 2022年10月30日
      10月的最好几天,很想去三亚旅游,很想去看海,希望不久就可以实现。  10月的最后几天,希望开始新的人生,云游四海,行万里路,新的工作,新的人生,新的开始。  10月的最......
  • SQL模糊查询语句
    一般模糊语句如下:SELECT字段FROM表WHERE某字段Like条件其中关于条件,SQL提供了四种匹配模式:1、%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下......
  • 2022.10.29每日一题
    DaimayuanOnlineJudge-01序列题目描述我们称一个字符串为好字符串,指这个字符串中只包含\(0\)和\(1\)。现在有一个好字符串,求这个字符串中\(1\)恰好出现\(k\)次......
  • drools_10_function
    在drl文件定义function在drl规则文件中可定义函数,这些函数可以在规则中被使用.示例:packagecom.sample.rulesimportcom.sample.Order;functionvoidprintInfo(String......
  • leetcode102-二叉树的层序遍历
    102.二叉树的层序遍历有两种实现方法。第一种是递归,第二种是队列实现。第一种是看了别人的代码写出来的,第二种是自己写的。这道题的不能直接把遍历得到的数字直接塞进res......
  • HCIA-ICT实战基础10-广域网技术PPP
    HCIA-ICT实战基础-广域网技术PPP目录早期广域网技术概述PPP协议原理与配置1早期广域网技术概述1.1什么是广域网广域网是连接不同地区局域网的网络,通常所覆盖的范......