zoukankan      html  css  js  c++  java
  • 统一返回对象突然多个success属性

    今天在测试的时候突然发现统一返回对象里面多个success属性:

    @Data
    @Accessors(chain = true)
    public class ApiResponse<T> {
        private int code;
        private String reason;
        private T data;
    
        public ApiResponse(T data) {
            this.data = data;
        }
    
        public ApiResponse(String reason, int code) {
            this.code = code;
            this.reason = reason;
        }
    
        public ApiResponse() {
        }
    
        public boolean isSuccess() {
            return ResultCode.SUCESS.getErrorCode() == code;
        }
    
        public static <T> ApiResponse success(T data) {
            ApiResponse<T> responseResult = new ApiResponse<T>(data);
            responseResult.setCode(ResultCode.SUCESS.getErrorCode());
            return responseResult;
        }
    
        public static <T> ApiResponse fail(T data) {
            ApiResponse<T> responseResult = new ApiResponse<T>();
            responseResult.setCode(ResultCode.INTERNAL_ERROR.getErrorCode());
            responseResult.setReason(data.toString());
            return responseResult;
        }
    
    
        public static void main(String[] args) {
            ApiResponse success = ApiResponse.success(1);
            System.out.println(JSONObject.toJSONString(success));
    
            HashMap<Object, Object> objectObjectHashMap = Maps.newHashMap();
            objectObjectHashMap.put("code", 1);
            objectObjectHashMap.put("reason", 1);
            objectObjectHashMap.put("data", 1);
            System.out.println(JSONObject.toJSONString(objectObjectHashMap));
    
        }
    }
    

    这是resoult返回的枚举.

    
    public enum ResultCode {
        SUCESS(0, "请求成功"),
        NO_CONTENT(204, "请求无内容"),
        USER_NOT_LOGIN(401, "用户未登录"),
        USER_LOGIN_FAIL(-2, "用户登录失败"),
        USER_ACCESS_FORBIDDEN(403, "用户授权失败"),
        NOT_FOUND(404, "资源不存在"),
        INTERNAL_ERROR(500, "服务器错误"),
        SYSTEM_ERROR(501, "系统繁忙"),
        BUSINESS_SUCESS(1, "数据正常返回"),
        UNKNOWN(-1, "系统异常"),
        BUSINESS_FAILURE(-2, "业务异常"),
        INVALID_ARGUMENT(11001, "非法参数");
    
        private static final Map<Integer, ResultCode> values = new HashMap();
        private int errorCode;
        private String error;
    
        private ResultCode(int errorCode, String error) {
            this.errorCode = errorCode;
            this.error = error;
        }
    
        public static ResultCode valueOf(int code) {
            ResultCode ec = (ResultCode) values.get(Integer.valueOf(code));
            return ec != null ? ec : UNKNOWN;
        }
    
        public int getErrorCode() {
            return this.errorCode;
        }
    
        public String getError() {
            return this.error;
        }
    
        static {
            ResultCode[] var0 = values();
            int var1 = var0.length;
    
            for (int var2 = 0; var2 < var1; ++var2) {
                ResultCode ec = var0[var2];
                values.put(Integer.valueOf(ec.errorCode), ec);
            }
    
        }
    }
    

    这是执行结果:

    在这里插入图片描述
    转成json的时候多个success属性,然后查看ApiResponse里面有个isSuccess方法,去掉之后,success属性没有,
    怀疑是方法名称叫做isSUccess方法,然后进行json序列化的的时候加上了这个属性.用的阿里的fastjson.

    在isSuccess方法打个断点:
    在这里插入图片描述
    序列化的时候,debug进来了.应该是fastjson序列化的时候把属性加上去了.
    但是倒数第二个栈点进不去
    阿里开发手册:
    在这里插入图片描述
    fastjson和jackson在把对象序列化成json字符串的时候,是通过反射遍历出该类中的所有getter方法,得到getHollis和isSuccess,然后根据JavaBeans规则,他会认为这是两个属性hollis和success的值。直接序列化成json:{“success”:true}
    为什么强烈禁止开发人员使用isSuccess作为变量名

    世界上所有的不公平都是由于当事人能力不足造成的.
  • 相关阅读:
    求菲波那契数列的第n个数
    一个球,初始高度100,每次落下回弹一半高度,求第n次落下球走的距离
    MySQL优化
    linux常用命令2
    win7安装ANT
    win7配置java环境变量
    kvm虚拟机磁盘文件读取小结
    kvm linux虚拟机在线扩展磁盘
    binlog2sql
    linux上 查看mysql的binglog日志
  • 原文地址:https://www.cnblogs.com/javayida/p/13346806.html
Copyright © 2011-2022 走看看