亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了Java 8-CrudRepository<Developer,Long&>類型中的方法save(S)不適用于參數(shù)(可選<Developer&>)的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我開始使用Spring框架進行Java開發(fā),為了獲得比Hello World更復雜的東西,我找到了本教程并嘗試遵循。

https://www.toptal.com/spring/beginners-guide-to-mvc-with-spring-framework

我發(fā)現(xiàn)的問題是,由于擴展”CrudRepository”的My類返回一個可選的<Skills>和可選的<Developer>而不只是一個技能/開發(fā)人員對象,因此提議的代碼:在DevelopersController.java中出現(xiàn)錯誤。

    @RequestMapping(value="/developer/{id}/skills", method=RequestMethod.POST)
    public String developersAddSkill(@PathVariable Long id, @RequestParam Long skillId, Model model) {
    Skill skill = skillRepository.findOne(skillId);
    Developer developer = repository.findOne(id);

    if (developer != null) {
        if (!developer.hasSkill(skill)) {
            developer.getSkills().add(skill);
        }
        repository.save(developer);
        model.addAttribute("developer", repository.findOne(id));
        model.addAttribute("skills", skillRepository.findAll());
        return "redirect:/developer/" + developer.getId();
    }

    model.addAttribute("developers", repository.findAll());
    return "redirect:/developers";
}

我尋找了一些關(guān)于Java 8可選的信息,但由于我仍然缺乏編程經(jīng)驗,我很難理解如何正確使用它。

我將代碼更改為,并設法排除了其中一個錯誤…

    @RequestMapping(value="/developer/{id}/skills", method=RequestMethod.POST)
    public String developersAddSkill(
        @PathVariable Long id, 
        @RequestParam Long skillId, 
        Model model) {
    Optional<Skill> skill = skillRepository.findById(skillId);
    Optional<Developer> developer = repository.findById(id);

    developer.get().getSkills();
    if (developer != null) {
        if (!developer.get().hasSkill(skill)) {
            developer.get().getSkills().add(skill);
        }
        repository.save(developer);
        model.addAttribute("developer", repository.findById(id));
        model.addAttribute("skills", skillRepository.findAll());
        return "redirect:/developer/" + developer.getId();
    }
    return "Confused";
}

但我仍然在我的日食中收到錯誤:

類型列表中的方法Add(Skill)不適用于參數(shù)(可選)
未為可選類型定義方法getID()
CrudRepository類型中的方法save(S)不適用于參數(shù)(可選)

我如何修復此問題?
另外,為什么行:

if (!developer.get().hasSkill(skill)) {

未顯示錯誤,但行:

developer.get().getSkills().add(skill);

是嗎?

推薦答案

如changelog所述,較新版本的Spring-Data(上面的1.6.0)將為findByID()方法返回可選的。在Spring-Data的以前版本中,如果在數(shù)據(jù)庫中找不到具有指定id的對象,則findById()的結(jié)果將為null

如您的示例所示,Optional可能包含一些開發(fā)人員,也可能沒有開發(fā)人員。要檢查findById()是否返回了開發(fā)人員,您應該使用:

//You probably should rename the developer variable to "result".
Optional<Developer> developer = repository.findById(id);
if(developer.isPresent()){
    //developer found, you can get it.
    Developer aDeveloper = developer.get();
    //aDeveloper.hasSkill(skill); is acessible now.
}else{
    //no developer found with the specified Id.
}

在Spring-Boot的早期版本中,如果Spring數(shù)據(jù)依賴低于1.6.x,您將使用:

Developer developer = repository.findById(id);
if (developer != null) {
    //developer found       
}

如果在沒有開發(fā)人員的情況下嘗試Developer.get(),將拋出異常。因此,請先查看isPresent()。

這篇關(guān)于Java 8-CrudRepository&lt;Developer,Long&>類型中的方法save(S)不適用于參數(shù)(可選&lt;Developer&>)的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:amp lt 不適用于 參數(shù) 可選 方法 類型
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定