当前位置: 首页 > 后端技术 > Java

java打包结果集有问题

时间:2023-04-01 19:13:16 Java

java打包结果集一个用户操作,比如登录,可能有很多种情况,用户级别:账号错误,密码错误;服务器级别:数据库错误等。但是我们通常会直接将一个参数解析成json对象返回给前端,那么我们如何判断是哪种情况,给用户反馈信息呢?解决方案我们通常可以直接将一个java对象解析成json返回给前端//1.创建用户对象Useruser=newUser();//2.解析成json对象Stringjson=JSONObject.toJSONString(user);//3.返回前端PrintWriterwriter=response.getWriter();writer.write(json);writer.close();既然可以直接解析一个java对象,那我们是不是可以新建一个类,里面可以存放java对象(data:前端需要的数据),编码信息(code:提供前端判断)和提示信息(msg:提示用户的信息)。解决方法packagecn.stopyc.constant;/***@program:return-project*@description:返回值包装*@author:stop.yc*@create:2022-04-0112:24**/publicclassResult{/***编号*/privateIntegercode;/***信息*/privateStringmsg;/***数据*/privateTdata;公共结果(){超级();}publicResult(Integercode,Stringmsg,Tdata){this.code=code;this.msg=味精;这个。数据=数据;}publicResult(Integercode,Stringmsg){this.code=code;this.msg=味精;}publicIntegergetCode(){返回代码;}publicvoidsetCode(Integercode){this.code=code;}publicStringgetMsg(){返回消息;}publicvoidsetMsg(Stringmsg){this.msg=msg;}publicTgetData(){返回数据;}publicvoidsetData(Tdata){this.data=data;}@OverridepublicStringtoString(){return"Result{"+"code="+code+",msg='"+msg+'\''+",data="+data+'}';}}@WebServlet("/user/*")publicUserServletextendsBaseServlet{publicvoidlogin(HttpServletRequestreq,HttpServletResponseresp)throwsIOException{//1.获取前端信息BufferedReaderreader=req.getReader();StringuserStr=reader.readLine();//2.json对象封装成java对象Useruser=JSON.parseObject(userStr,User.class);//3。获取服务对象UserServiceuserService=newUserServiceImpl();//4。调用服务层的登录函数获取处理结果集(通过用户名和密码登录)ResultuserResult=userService.login(user);字符串json=JSONObject.toJSONString(userResult);//5。返回前端PrintWriterwriter=response.getWriter();作家。写(json);作家。关闭();}}//省略接口编写publicUserServiceImplimplementsUserService{@OverridepublicResultlogin(Useruser){//具体业务逻辑实现。.(仅作演示,具体逻辑是否正确)if(){//1.成功,返回一个对象,里面封装了代码,提示信息,数据。returnnewResult<>(400200,"登录成功",user);}elseif(){//2.密码错误returnnewResult<>(400210,"密码错误",user);}elseif(){//3.错误的账号returnnewResult<>(400220,"账号错误",user);}}}const_this=this;axios({method:"post",url:"http://localhost:8080/user/login",data:_this.user,}).then(function(resp){//然后前端可以根据你的代码判断一些需要执行的操作,比如密码错误需要执行什么操作,登录成功需要执行什么操作...if(resp.data.code===400200){_this.position=resp.data.data;_this.$message({message:resp.data.msg,type:'success'});}elseif(resp.data.code===400210){_this.$message.error(resp.data.msg);}elseif(resp.data.code===400220){_this.$message.error(resp.data.msg);}else{_this.$message.error('未知错误,请联系管理员');}})但是,代码那么多,我就自己写了,那怎么办呢?以及如何统一前后端?那么我们可以维护一个枚举类来统一编码信息packagecn.stopyc.constant;/***@Description:结果集枚举*@Param:*@return:*@Author:stop.yc*@Date:2022/4/28*/publicenumResultEnum{//自定义//一般UNKNOWN_ERROR(-1,"未知错误"),SUCCESS(200,"成功"),SERVER_INTERNAL_ERROR(500,"内部服务器错误"),RESOURCE_NOT_FOUND(404,"找不到资源"),PARAMETER_NOT_VALID(400,"参数无效"),DATABASE_ERROR(600,"数据库操作错误"),//用户模块5002XXPASSWORD_FAILED(500200,"密码错误"),REPEAT_NAME(500210,"用户名重复"),FIND_USER_FAILED(500220,"用户名不正确不存在"),CHECK_CODE_ERROR(500230,"验证码错误"),//任务模块6002XXNO_TASK(600200,"当前无任务"),//.......;/***Number*/私有整数代码;/***消息*/privateStringmsg;ResultEnum(整数代码,字符串消息){this.code=code;this.msg=味精;}publicIntegergetCode(){返回代码;}公共字符串getMsg(){返回消息;}}那么以后服务层封装结果集的时候,直接调用枚举returnnewResult<>(ResultEnum.SUCCESS.getCode(),ResultEnum.SUCCESS.getMsg(),user);