日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

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

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

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

問題描述

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

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

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

    @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";
}

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

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

    @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)不適用于參數(可選)
未為可選類型定義方法getID()
CrudRepository類型中的方法save(S)不適用于參數(可選)

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

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

未顯示錯誤,但行:

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

是嗎?

推薦答案

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

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

//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數據依賴低于1.6.x,您將使用:

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

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

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

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

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

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

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

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

運動步數有氧達人2018-06-03

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

每日養生app2018-06-03

每日養生,天天健康

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

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