NutzCN Logo
问答 关于 nutz.mvc 适配器的一个诡异 Bug
发布于 157天前 作者 htgylzhq 86 次浏览 复制 上一个帖子 下一个帖子
标签:

参数 username 和 password 居然时有时无:
情况一:username 取到的值是 null,password 取的值是 username 的值

    @At
    @Aop("redis")
    @Ok("json:{locked:'password',nullAsEmtry:true,compact:true}")
    public Map<String, Object> bind(String username, String password,
                                    HttpServletResponse response) {
        String respText = AccountService.bindAccount(username, password);
        Map<String, Object> respMap = Json.fromJsonAsMap(Object.class, respText);
        if ((Integer) respMap.get("code") == 0) {
            String token = R.UU32();
            jedis().hset(token, "username", username);
            jedis().hset(token, "password", password);
            response.setHeader("Authorization", new BASE64Encoder().encode(Strings.getBytesUTF8(token)));
        }

        return respMap;
    }

情况二:正常

    @At
    @Aop("redis")
    @Ok("json:{locked:'password',nullAsEmtry:true,compact:true}")
    public Map<String, Object> bind(String username, String password,
                                    HttpServletResponse response) {
        String respText = AccountService.bindAccount(username, password);
        Map<String, Object> respMap = Json.fromJsonAsMap(Object.class, respText);
       /* if ((Integer) respMap.get("code") == 0) {
            String token = R.UU32();
            jedis().hset(token, "username", username);
            jedis().hset(token, "password", password);
            response.setHeader("Authorization", new BASE64Encoder().encode(Strings.getBytesUTF8(token)));
        }*/

        return respMap;
    }

情况三:正常

    @At
    @Aop("redis")
    @Ok("json:{locked:'password',nullAsEmtry:true,compact:true}")
    public Map<String, Object> bind(@Param("username") String username, @Param("password") String password,
                                    HttpServletResponse response) {
        String respText = AccountService.bindAccount(username, password);
        Map<String, Object> respMap = Json.fromJsonAsMap(Object.class, respText);
        if ((Integer) respMap.get("code") == 0) {
            String token = R.UU32();
            jedis().hset(token, "username", username);
            jedis().hset(token, "password", password);
            response.setHeader("Authorization", new BASE64Encoder().encode(Strings.getBytesUTF8(token)));
        }

        return respMap;
    }
2 回复

关键是情况一和情况二的对比,理论上讲,if 代码块不会影响到参数的适配才对。

如果是jdk8,加编译参数 -paramters, 如果是jdk7或以下,统统写@Param

添加回复
请先登陆
回到顶部