RestTemplate HTTP请求报错:400 Bad Request解决方法

使用Restemplate 请求 kafka监控的消费数。
背景:我要监控某个topic的个数,进而往里发送消息。但是他的请求一开始给我的是
curl 'http://127.0.0.1:49035/api/v1/query_range?query=sum(kafka_consumergroup_lag%7Binstance%3D%2210.19.2.238%3A9308%22%2Ctopic%3D~%22middle-h265-video-schedule%22%7D)%20by%20(consumergroup%2C%20topic)%20&start=1729580548&end=1729580608&step=60'
这个本身使用curl请求没问题但是用了 Restemplate就报错。
错误示例:

 long currentTime=System.currentTimeMillis()/1000;
        String requestParam = UriComponentsBuilder.fromHttpUrl("http://127.0.0.1:49035/api/v1/query_range?query=sum(kafka_consumergroup_lag%7Binstance%3D%2210.19.2.238%3A9308%22%2Ctopic%3D~%22short-h265-video-schedule%22%7D)%20by%20(consumergroup%2C%20topic)%20")
                .queryParam("start", currentTime - 60)
                .queryParam("end", currentTime)
                .queryParam("step", 60).build().toUriString();
        ResponseEntity<String> responseEntity = restTemplate.getForEntity(requestParam, String.class);
        String body = responseEntity.getBody();
        log.info("video transcode|getShortVideoTransCount|{}",body);
        Optional<Integer> count = Optional.ofNullable(body)
                .map(j -> JSONObject.parseObject(j))
                .map(j -> j.getJSONObject("data"))
                .map(j -> j.getJSONArray("result"))
                .map(j -> j.stream().findFirst().get().toString())
                .map(j -> JSONObject.parseObject(j))
                .map(j -> j.getJSONArray("values"))
                .map(j -> j.getJSONArray(0))
                .map(j -> j.getInteger(1));
        if(count.isPresent())return count.get();

原因是 query参数是编码过的。
正确示例:

long currentTime=System.currentTimeMillis()/1000;
        URI uri = UriComponentsBuilder.fromHttpUrl("http://127.0.0.1:49035/api/v1/query_range")
                .queryParam("query", "sum(kafka_consumergroup_lag{instance=\"10.19.2.238:9308\",topic=~\"short-h265-video-schedule\"}) by (consumergroup, topic)")
                .queryParam("start", currentTime - 60)
                .queryParam("end", currentTime)
                .queryParam("step", 60)
                .build().toUri();
//        log.info("request getShortVideoTransCount:{}",uri);
        ResponseEntity<String> responseEntity = httpTemplate.getForEntity(uri, String.class);
        String body = responseEntity.getBody();
        log.info("video transcode|getShortVideoTransCount|{}",body);
        Optional<Integer> count = Optional.ofNullable(body)
                .map(j -> JSONObject.parseObject(j))
                .map(j -> j.getJSONObject("data"))
                .map(j -> j.getJSONArray("result"))
                .map(j -> j.stream().findFirst().get().toString())
                .map(j -> JSONObject.parseObject(j))
                .map(j -> j.getJSONArray("values"))
                .map(j -> j.getJSONArray(0))
                .map(j -> j.getInteger(1));
        if(count.isPresent())return count.get();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值