You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring HTTP Interface的@GetExchange中用对象处理请求参数?

Spring HTTP Interface 中对象映射为查询参数的正确方式

在Spring MVC控制器中,我们可以直接将对象作为方法参数,框架会自动把请求的查询参数映射到对象的对应属性,示例如下:

public record PageRequest(Integer pageSize, Integer page) {}

@GetMapping("/articles/{type}")
List<Article> listArticles(@PathVariable String type, PageRequest req) {
  // 业务逻辑实现
}

但在Spring HTTP Interface的@GetExchange注解场景下,直接传入对象或用@RequestParam标记对象的写法都无法生效:

无效写法1:

@GetExchange("/articles/{type}")
List<Article> listArticles(@PathVariable String type, PageRequest req);

无效写法2:

@GetExchange("/articles/{type}")
List<Article> listArticles(@PathVariable String type, @RequestParam PageRequest req);

此前只能将对象拆解为单个参数实现需求:

@GetExchange("/articles/{type}")
List<Article> listArticles(@PathVariable String type, @RequestParam Integer pageSize, @RequestParam Integer page);

这种写法虽然能生成类似GET /articles/red/?pageSize=10&page=4的请求,但无法和控制器端的方法签名保持一致。

正确解决方案:使用@ParameterObject注解

在Spring HTTP Interface中,只需给对象参数添加org.springframework.web.service.annotation.ParameterObject注解,就能让框架自动将对象的每个属性映射为对应的查询参数,同时保持和控制器端完全一致的方法签名:

@GetExchange("/articles/{type}")
List<Article> listArticles(@PathVariable String type, @ParameterObject PageRequest req);

调用该方法时,框架会自动把PageRequest的pageSize和page属性拼接为查询参数,生成符合预期的请求URL,完美匹配控制器端的参数接收逻辑。


内容的提问来源于stack exchange,提问作者Fredrik Rambris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:42:24