java封装后果集

存在问题

一个用户的操作,比方登录,就可能会有很多种状况,用户层面的:账号谬误、明码谬误;服务器层面的:数据库谬误等等状况。然而咱们失常的是间接把一个参数解析成json对象返回给前端,那咱们如何去判断是哪一种状况,并给用户一个反馈信息呢?

解决思路

咱们平时能够间接解析一个java对象成json返回前端

//1. 创立一个user对象User user = new User();//2。 解析成json对象String json = JSONObject.toJSONString(user);//3. 返回前端PrintWriter writer = response.getWriter();writer.write(json);writer.close();

既然能够间接解析一个java对象,那咱们能不能新建一个类,外面能够存java对象(data:前端须要的数据),编码信息(code:提供前端判断)和提示信息(msg:提醒用户的信息)。

解决办法

package cn.stopyc.constant;/** * @program: return-project * @description: 返回值包装 * @author: stop.yc * @create: 2022-04-01 12:24 **/public class Result<T> {    /**     * 编号     */    private Integer code;    /**     * 信息     */    private String msg;    /**     * 数据     */    private T data;    public Result() {        super();    }    public Result(Integer code, String msg, T data) {        this.code = code;        this.msg = msg;        this.data = data;    }    public Result(Integer code, String msg) {        this.code = code;        this.msg = msg;    }    public Integer getCode() {        return code;    }    public void setCode(Integer code) {        this.code = code;    }    public String getMsg() {        return msg;    }    public void setMsg(String msg) {        this.msg = msg;    }    public T getData() {        return data;    }    public void setData(T data) {        this.data = data;    }    @Override    public String toString() {        return "Result{" +                "code=" + code +                ", msg='" + msg + '\'' +                ", data=" + data +                '}';    }}@WebServlet("/user/*")public UserServlet extends BaseServlet {        public void login(HttpServletRequest req, HttpServletResponse resp) throws IOException {        //1. 获取前端信息         BufferedReader reader = req.getReader();        String userStr = reader.readLine();                //2. json对象封装成java对象        User user = JSON.parseObject(userStr, User.class);                   //3.获取service对象        UserService userService = new UserServiceImpl();        //4.调用service层的登录性能,获取处理结果集(通过名字和明码进行登录)        Result<User> userResult = userService.login(user);                String json = JSONObject.toJSONString(userResult);        //5. 返回前端        PrintWriter writer = response.getWriter();        writer.write(json);        writer.close();            }}//省略接口书写public UserServiceImpl implements UserService {        @Override    public Result<User> login(User user) {                //具体的业务逻辑实现。。。(只做演示应用,具体的逻辑是否正确不思考)                        if(){            //1.胜利,返回一个对象,外面封装了编码,提示信息,数据.            return new Result<>(400200,"登录胜利",user);        }else if(){            //2. 明码谬误            return new Result<>(400210,"明码谬误",user);        }else if(){            //3. 账号谬误            return new Result<>(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'            });        } else if (resp.data.code === 400210) {                _this.$message.error(resp.data.msg);        }else if (resp.data.code === 400220) {            _this.$message.error(resp.data.msg);        } else {            _this.$message.error('未知谬误,请分割管理员');        } })

然而,编码这么多,都是本人轻易写的,那怎么办呢?而且怎么做到前后端对立呢?那么咱们能够保护一个枚举类,对立编码信息。

package cn.stopyc.constant;/*** @Description: 后果集枚举* @Param:* @return:* @Author: stop.yc* @Date: 2022/4/28*/public enum ResultEnum {    //自定义    //通用    UNKNOWN_ERROR(-1,"未知谬误"),    SUCCESS(200,"胜利"),    SERVER_INTERNAL_ERROR(500,"服务器外部谬误"),    RESOURCE_NOT_FOUND(404,"资源未找到"),    PARAMETER_NOT_VALID(400,"参数不非法"),    DATABASE_ERROR(600,"数据库操作谬误"),    //用户模块 5002XX    PASSWORD_FAILED(500200,"明码谬误"),    REPEAT_NAME(500210,"用户名反复"),    FIND_USER_FAILED(500220,"用户名不存在"),    CHECK_CODE_ERROR(500230,"验证码谬误"),    //工作模块 6002XX    NO_TASK(600200,"以后没有工作"),    //.......     ;    /**     * 编号     */    private Integer code;    /**     * 信息     */    private String msg;    ResultEnum(Integer code, String msg) {        this.code = code;        this.msg = msg;    }    public Integer getCode() {        return code;    }    public String getMsg() {        return msg;    }}

那么当前的service层封装后果集的时候,间接调用枚举

return new Result<>(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getMsg(), user);