簡體   English   中英

可選的長參數'id'存在但不能轉換為空值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM