首页 > 解决方案 > 基于 Spring 的休息调用中的可选 @PathVariable

问题描述

我正在使用带有 java 1.8 的 Spring boot 2.2.2。我有一个帖子类型的休息端点/getViewAnalyticsByDimension。现在为了适应一项功能,我需要将 api 更改为 /getViewAnalyticsByDimension/{priceAgreementId}。我想将路径变量 priceAgreementId 声明为可选。但是,当我在没有来自 Postman 的价格协议 ID 时将请求发布到 /getViewAnalyticsByDimension 时,它无法找到控制器方法。当没有 priceAgreementId 和实际 priceAgreementId 可用时,我可以要求我的前端对应方发送“空白”。但这并不优雅。

标签: javaspringspring-boot

解决方案


对于给定的方法,您可以有多个请求映射。因此,在您的情况下,您可以执行以下操作以使其在使用和不使用路径变量的情况下工作:

@RequestMapping(value = {"/getViewAnalyticsByDimension", "/getViewAnalyticsByDimension/{priceAgreementId}"}")
public Object getObject(@PathVariable Optional<Object> priceAgreementId) {
   //...
}

如果您使用的是 spring 的旧版本,您可以有两种不同的方法:

@RequestMapping(value = "/getViewAnalyticsByDimension/{priceAgreementId}")
public Object getObject(@PathVariable(name = "priceAgreementId") Object priceAgreementId) {
    //...        
}

@RequestMapping(value = "/getViewAnalyticsByDimension")
public Object getObject() {
    //...
}

您可以查看https://www.baeldung.com/spring-optional-path-variables更多信息


推荐阅读