基于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); }阅读更多
相关文章推荐
- 基于java的微信小程序的实现(八)用户点赞/取消点赞功能相关后端接口开发
- 基于java的微信小程序的实现(九)用户留言功能相关后端接口开发
- 基于java的微信小程序的实现(五)用户个人信息小程序端开发
- 基于java的微信小程序的实现(十)用户搜索及热搜词相关功能后端实现
- Java微信开发(通过java程序获取用户个人信息)
- 基于java的微信小程序的实现(七)视频首页的前后端开发
- java实现微信授权获取用户openid及授权用户相关信息
- 基于java的微信小程序的实现(十一)用户关注功能与查询视频发布者功能后端实现
- 夺命雷公狗---微信开发53----网页授权(oauth2.0)获取用户基本信息接口(3)实现世界留言版
- 微信小程序用户信息接口实现总结
- 微信公众平台开发实战Java版之微信获取用户基本信息
- 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息
- 夺命雷公狗---微信开发51----网页授权(oauth2.0)获取用户基本信息接口(1)
- 微信小程序 获取小程序码和二维码java接口开发
- 夺命雷公狗---微信开发52----网页授权(oauth2.0)获取用户基本信息接口(2)
- 微信开发之实现获取用户信息
- php微信开发 接口配置信息 如何代码实现,代码实现,入口文件 token 配置失败
- 微信小程序开发之获取openid及用户信息
- 微信小程序开发(二)——使用ssh(struts2+hibernate+spring)框架实现保存前台微信小程序中微信用户唯一标识到数据库(MySQL)中
- php CI框架微信开发小记——获取openid和其他相关用户信息