NutzCN Logo
问答 有关于redirect转发获取参数的问题
发布于 2194天前 作者 suyun 2380 次浏览 复制 上一个帖子 下一个帖子
标签: nutzwk

如下代码

@At({"/information/?", "/information"})
    @Ok("re:>>:/remote/rest/api/info/${p.action}")
    @POST
    @Filters
    @Override
    public String grabInformation(String action, @Param("..") NutMap params) {
        log.debug("远程接口[:获取信息]被访问...");
        Result result = checkParams(action, params);
        if (!result.successed()) {
            return "redirect:/remote/rest/api/error?" +
                    "errCode=" + result.getCode() +
                    "&errMsg=" + result.getMsg() +
                    "&data=" + result.getData();
        }
        return null;
    }

我想在@ok里面的路径设置一个参数,此参数的值是这个方法的入参action,我的写法是通过${p.action},但实际上似乎没作用

19 回复

重定向的地址变成了什么,确定有action参数?

@At("/info/testact")
    @Ok("json:full")
    public Result testAct(@Param("::data") NutMap data) {
        log.debug(Json.toJson(data));
        return Result.success();
    }

这个是重定向到的地方,其实action就是入口函数名称

还有就是,重定向是不是不能到@POST入口函数上

我重定向的地址上如果携带的参数中有中文,入口函数接收的时候会乱码

重定向当然不能到POST

p.xxx是请求参数, 需要的是路径参数, 把需要的值req.setAttr, 然后 ${a.xxx}

我发现我在第一个入口函数用req.setAttr之后,重定向到第二个函数时,req里面没有我设置的值

肯定呀, 外部重定向了, req对象都不是同一个了

还有个问题就是,我如果写成 return ">>:/remote/rest/api/oper/" + action + "?data=" + data; 这个时候如果data里面是中文,那么入口函数在接收的时候就变成乱码了,这个是什么原因

需要URLEncode一下

我是先把中文部分用base64 encode了,然后接收后再decode,这样没问题;
然后又出现一个新问题,我使用postman调试的时候,如果有个参数的值是中文的话,能请求到后台,但是服务器不给返回任何结果,后台也没有报错,返回内容

Could not get any response
There was an error connecting to 127.0.0.1:8080/remote/rest/api/information?accessToken=AhTS6AxYHRB3oTbTqes&action=device&nameasd=%E7%88%B1%E4%B8%8A%E5%BD%93%E5%AF%B9%E8%AF%9D%E6%A1%86.
Why this might have happened:
The server couldn't send a response:
Ensure that the backend is working properly
Self-signed SSL certificates are being blocked:
Fix this by turning off 'SSL certificate verification' in Settings > General
Proxy configured incorrectly
Ensure that proxy is configured correctly in Settings > Proxy
Request timeout:
Change request timeout in Settings > General

有没有进入口方法

昨天公司断网了,就没给回复,不好意思

类名上的路径是:@At("/remote/rest/api")
我的第一个入口方法,即用来重定向的入口函数是这样的

    @At({"/information/?", "/information"})
    @Ok("re")
    @Override
    public String grabInformation(String action, @Param("..") NutMap params) {
        log.debug("远程接口[:获取信息]被访问...");
        Result result = checkParams(action, params);
        String accessToken = params.getString("accessToken");
        if (!result.successed()) {
            return retErrPath(result.getCode(), encode(result.getMsg()), accessToken);
        }
        RestAPI restAPI = this.restAPIService.getRestAPI(accessToken, null);
        result = super.reloadExpiresTime(restAPI);
        if (!result.successed()) {
            return retErrPath(result.getCode(), encode(result.getMsg()), accessToken);
        }

        encode(params);
        return ">>:/remote/rest/api/info/" + action + "?data=" + Json.toJson(params);
    }

然后我定义一个action为device的入口函数是这样的

    @At("/info/device")
    @Ok("json:full")
    public Result grabDevice(@Param("::data") NutMap data) {
        decode(data);
        String token = data.getString("accessToken");
        RestAPI restAPI = restAPIService.getRestAPI(token, null);
        if (isTimeout(restAPI)) {
            return Result.error(1002, "当前登录超时").addData(restAPI.getAccessToken());
        }

        Tb_dev_inst_show instShow = devInstService.dataInst(Cnd.where("tdi.unitId", "=", restAPI.getUnitId())
                .andEX("tdi.code", "=", data.getString("meterCode"))
                .andEX("tdi.mainNo", "=", data.getString("stapleCode")));
        return Result.success().addData(instShow);
    }

然后我使用postman请求的地址是:127.0.0.1:8080//remote/rest/api/information/device
给定的参数是:{"accessToken":".....", "namestr":"随机中文"}
如果带上参数namestr,后台没有响应,前台也不能获取返回消息

请求地址多了条斜杠,请忽略

没反应指啥,进哪个入口方法了

哪个入口方法都没进去

我说错了,如果带上哪个中文的参数,只能进入第一个入口,然后到最后重定向的时候,就没有结果了,最后日志就打印出来一句
cn.nutzwk.app.web.commons.processor.LogTimeProcessor.process(LogTimeProcessor.java:36) - [POST]URI=/remote/rest/api/information 13065ms

直接输入重定向的目标地址, 能进入口方法吗?

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