首页 > 解决方案 > Spring MVC 中的 @RequestParam with required=false 使用参数作为必需参数

问题描述

我正在尝试包含一个可为空的 RequestParam 但 Spring 似乎将其视为强制性的

控制器:

open fun calculate(@RequestHeader(name = USER_ID_HEADER, required = true) userId: String,
                   @RequestParam(name = "product_price_amount", required = true) productPriceAmount: BigDecimal,
                   @RequestParam(name = "product_price_currency", required = true) productPriceCurrency: String,
                   @RequestParam(name = "item_id", required = true) itemId: String,
                   @RequestParam(name = "promocode", required = true) promocode: String,
                   @RequestParam(value = "carrier_delivery_mode",
                                 required = false, defaultValue = "BUYER_ADDRESS") carrierDeliveryMode: String? = "BUYER_ADDRESS"

获取请求

calculator/costs?product_price_amount=100&product_price_currency=EUR&item_id=g9kp615z5l32&promocode=1LL

我收到以下错误:

[ { "error_code": "Bad Request", "message": "参数条件 \"product_price_amount, product_price_currency, item_id, promocode, carrier_delivery_mode\" 不符合实际请求参数:product_price_amount={100}, product_price_currency={EUR}, item_id={g9kp615z5l32},促销代码={1LL}" } ]

任何想法为什么这会失败?

标签: springspring-mvckotlin

解决方案


您已经在注释中有一个默认值。请删除这个?= "BUYER_ADDRESS" 部分并保留它 carrierDeliveryMode: String. 希望有帮助:)


推荐阅读