[英]Optional long parameter 'id' is present but cannot be translated into a null value
我的Spring控制器中有兩個方法:
@RequestMapping(method = RequestMethod.GET, value = CARD_PATH)
public @ResponseBody List<BaseballCard> getAllCards()
@RequestMapping(method = RequestMethod.GET, value = CARD_PATH + "/{id}")
public BaseballCard getCard(@PathVariable("id") long id)
發出GET /bbct/api/v1.0/card/1
的HTTP請求時出現以下錯誤。
可選的長參數'id'存在但由於被聲明為基本類型而無法轉換為空值。
建議將id
聲明為Long
; 但是,我寧願不這樣做。
我想知道為什么Spring認為id
參數是可選的? 因為我有另一個方法在id丟失時處理請求,所以如果將請求分派給getCard()
,則肯定提供了id。
這是完整的控制器:
@Controller
public class BaseballCardController {
private static final String CARD_PATH = "/bbct/api/v1.0/card";
private List<BaseballCard> cards = new ArrayList<BaseballCard>();
@RequestMapping(method = RequestMethod.POST, value = CARD_PATH)
public @ResponseBody
BaseballCard addCard(@RequestBody BaseballCard card) {
cards.add(card);
card.setId(cards.size());
return card;
}
@RequestMapping(method = RequestMethod.GET, value = CARD_PATH)
public @ResponseBody List<BaseballCard> getAllCards() {
return cards;
}
@RequestMapping(method = RequestMethod.GET, value = CARD_PATH + "/{id}")
public BaseballCard getCard(@PathVariable("id") long id) {
return cards.get((int)(id - 1));
}
}
我想發生的事情是你(無意中?)向/bbct/api/v1.0/card/
發出請求(注意結尾處的尾部斜線)並將其映射到getCard()
而不是getAllCards()
將id映射到Long
並在@PathVariable("id")
上設置required = false
屬性可能是個好主意,然后重定向到getAllCards()
。 這樣你就可以映射getAllCards()
斜杠后綴和非斜杠后綴版本
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.