@Autowiredをprivate BlogRepository blogRepository;に付けてSpring Bootアプリケーションで実行すると以下のようなエラーが出ます。
Description: Field blogRepository in com.webapp.certificationtest.controller.LoginController required a bean of type 'jp.winschool.spring.merukari.BlogRepository' that could not be found. The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true) Action: Consider defining a bean of type 'jp.winschool.spring.merukari.BlogRepository' in your configuration.
コードは以下のようになっています。
//LoginController.java package com.webapp.certificationtest.controller; import java.time.LocalDateTime; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import jp.winschool.spring.merukari.Blog; import jp.winschool.spring.merukari.BlogRepository; @Controller public class LoginController { @Autowired private BlogRepository blogRepository; /** * ログイン画面 に遷移する。 */ @RequestMapping("/login") public String showLoginForm(Model model) { //ログイン画面。 return "login"; } /** * メインページに遷移する。 * ログインが成功した場合、このメソッドが呼び出される。 */ @RequestMapping("/") public String login(Model model) { //メインページ。 return "index"; } // @RequestMapping("/needLogin/form") // public String form(Model model) { // // //ログイン画面。 // return "form"; // } @GetMapping("/form") public String form(Blog blog) { return "form"; } // @PostMapping("/create") // public String create(@Valid @ModelAttribute Blog blog, BindingResult bindingResult, Model model, // @RequestParam String price) { // boolean isNumber = price.matches("^[0-9]+$"); // boolean checkDigit = price.length() >= 10; // model.addAttribute("isNumber", !isNumber); // model.addAttribute("checkDigit", checkDigit); // model.addAttribute("isMinus", false); // // 入力値エラーが発生した場合、予約画面を表示 // if (bindingResult.hasErrors()) { // return "form"; // } // // // 正規表現で数字の形式になっているかチェック // if (!isNumber) { // return "form"; // } else if (checkDigit) { // return "form"; // } else if (Integer.parseInt(price) < 0) { // model.addAttribute("isMinus", true); // return "form"; // } else { // blog.setPrice(Integer.parseInt(price)); // } // blog.setPostDateTime(LocalDateTime.now()); // blogRepository.save(blog); // return "redirect:/blog/" + blog.getId(); // } }
//BlogRepository.java package com.webapp.certificationtest.controller; import org.springframework.data.jpa.repository.JpaRepository; public interface BlogRepository extends JpaRepository<Blog, Integer> { }
以下のようにBlogRepositoryインターフェースの前に@Beanを付ければいいのかとも思いましたが、
「@Beanはこのロケーションでは使用できません」と出てきました。
@Bean public interface BlogRepository extends JpaRepository<Blog, Integer> { }
拙い状況説明で分かりづらいところもあるかもしれませんが、
エラーの修正方法をご教授いただければ幸いです。
一応後で全ソースコードもアップする予定です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/03 01:41