feign使用url参数传参@SpringQueryMap使用

简介: feign使用url参数传参@SpringQueryMap使用

今天使用open-feign发起请求时发现个问题,我特别喜欢的url参数传参不好使了:

@FeignClient("another-service")
public interface MyFeignClient {
    @GetMapping("/foo/bar")
    Foo<Bar> get(Foo bar);
}

对应我们的controller

@GetMapping("foo/bar")
public Foo<Bar> get(Foo bar) {
    // ...
    return foo;
}

然后发起了请求发现根本没收到参数。。。

但如果我们添加了注解@RequestParam

@FeignClient("another-service")
public interface MyFeignClient {
    @GetMapping("/foo/bar")
    Foo<Bar> get(@RequestParam Foo bar);
}

会发现项目启动抛出异常

Caused by: java.lang.IllegalStateException: RequestParam.value() was empty on parameter 0

说是没添加参数名,好我们添加一下

@FeignClient("another-service")
public interface MyFeignClient {
    @GetMapping("/foo/bar")
    Foo<Bar> get(@RequestParam("bar") Foo bar);
}

但还是不对,我们打开日志:

2023-11-25T11:25:16.502+08:00 TRACE [user-service,,,] 2558612 --- [           main] s.n.www.protocol.http.HttpURLConnection  : ProxySelector Request for http://127.0.0.1:8000/front/squarePost/foo/bar?bar=Foo%28bar%3Dbar%29

可以看到我们的参数变成了:

http://127.0.0.1:8000/foo/bar?bar=Foo%28bar%3Dbar%29

我们用浏览器转一下码

decodeURIComponent("http://127.0.0.1:8000/foo/bar?bar=Foo%28bar%3Dbar%29")

得到:

原来是直接给我toString了,并且把整个对象当作参数传递过去了,我们此处使用@SpringQueryMap注解解决

@FeignClient("another-service")
public interface MyFeignClient {
    @GetMapping("/foo/bar")
    Foo<Bar> get(@SpringQueryMap Foo bar);
}

这下就对了:

2023-11-25T11:25:16.502+08:00 TRACE [user-service,,,] 2558612 --- [           main] s.n.www.protocol.http.HttpURLConnection  : ProxySelector Request for http://127.0.0.1:8000/front/squarePost/foo/bar?bar=bar
相关文章
|
25天前
|
JavaScript 前端开发 数据格式
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
22 0
|
25天前
|
JavaScript
js 获取并解析 url 中参数的三种方法
js 获取并解析 url 中参数的三种方法
15 0
|
1月前
|
文字识别 算法 API
视觉智能开放平台产品使用合集之在调用接口传入的图片URL参数,文件在本地或者非上海地域OSS链接,该怎么办
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
1月前
|
Web App开发 移动开发 安全
如何做到修改 url 参数页面不刷新
如何做到修改 url 参数页面不刷新
|
2月前
|
存储 Java 数据库连接
实时计算 Flink版产品使用合集之jdbccatalog中能指定url参数吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
存储 JavaScript 前端开发
js原生方法,获取url上面所有参数,并返回一个对象
JavaScript函数`getUrlParameters`用于从URL中提取所有参数并返回一个键值对对象。它接收URL,分割查询字符串,解码参数对,并存储在对象中。重复参数键会被存储为数组。
|
2月前
|
JavaScript
js如何实现修改URL参数并不刷新页面
js如何实现修改URL参数并不刷新页面
|
2月前
|
安全 Java 应用服务中间件
当遇到非法 URL 参数时,如何保障网页正常打开
访问如`http://example.com?a@b=1`的链接出现400 Bad Request错误,这是因为Tomcat不允许请求目标中含有非法字符。Spring Boot 2可通过配置`server.tomcat.relaxed-query-chars`来允许特殊字符,但这样做可能引入安全风险。因此,建议在Nginx层使用`rewrite_by_lua_block`和`ngx.redirect`进行重定向,将非法字符替换为合法形式,如`http://example.com?ab=1`,同时记录日志以监控。此方案能避免直接修改后端代码,提高安全性。
120 0
|
2月前
|
存储 小程序
【边做边学】uni.switchTab的目标页面获取不到url携的参数
【边做边学】uni.switchTab的目标页面获取不到url携的参数
158 1
|
2月前
|
JavaScript
如何在JS中实现修改URL参数而不刷新页面
如何在JS中实现修改URL参数而不刷新页面

热门文章

最新文章