前提・実現したいこと
Javaで検索と削除機能付きシステムを作っています。
実行して、http://localhost:8080/にアクセスしてたところ
以下のページが出てしまいました。
コンソール上のエラーが出ていないので、対応が分かりません。
ご教示いただけますと幸いです。
発生している問題・エラーメッセージ
Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Wed Oct 21 15:40:16 JST 2020 There was an unexpected error (type=Not Found, status=404).
該当のソースコード
java
1package com.example.demo; 2 3import org.springframework.boot.SpringApplication; 4import org.springframework.boot.autoconfigure.SpringBootApplication; 5 6@SpringBootApplication 7public class ShainListApplication { 8 9 public static void main(String[] args) { 10 SpringApplication.run(ShainListApplication.class, args); 11 } 12 13} 14 15
package com.example.demo; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import lombok.Data; /** * 社員情報 Entity */ @Entity @Data @Table(name="employee") public class User implements Serializable { /** * 社員情報 */ @Id @Column(name="id") @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; /** * 名前 */ @Column(name="name") private String name; /** * 生年月日 */ @Column(name="birthday") private String birthday; /** * 住所 */ @Column(name="address") private String address; /** * 電話番号 */ @Column(name="phone") private String phone; /** * 部門 */ @Column(name="department") private String department; }
import java.util.ArrayList; import java.util.List; 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.validation.ObjectError; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * 社員情報 Controller */ @Controller public class UserController { /** * 社員情報 Service */ @Autowired UserService userService; /** * 社員情報一覧画面を表示 * @param model Model * @return 社員情報一覧画面 */ @RequestMapping(value = "/user/list", method = RequestMethod.GET) public String displayList(Model model) { List<User> userlist = userService.searchAll(); model.addAttribute("userlist", userlist); return "user/list"; } /** * 社員新規登録画面を表示 * @param model Model * @return 社員情報一覧画面 */ @RequestMapping(value = "/user/add", method = RequestMethod.GET) public String displayAdd(Model model) { model.addAttribute("userRequest", new UserRequest()); return "user/add"; } /** * 社員新規登録 * @param userRequest リクエストデータ * @param model Model * @return 社員情報一覧画面 */ @RequestMapping(value = "/user/create", method = RequestMethod.POST) public String create(@Validated @ModelAttribute UserRequest userRequest, BindingResult result, Model model) { if (result.hasErrors()) { List<String> errorList = new ArrayList<String>(); for (ObjectError error : result.getAllErrors()) { errorList.add(error.getDefaultMessage()); } model.addAttribute("validationError", errorList); return "user/add"; } // 社員情報の登録 userService.create(userRequest); return "redirect:/user/list"; } /** * 社員情報詳細画面を表示 * @param id 表示する社員番号 * @param model Model * @return 社員情報詳細画面 */ @GetMapping("/user/{id}") public String displayView(@PathVariable Long id, Model model) { User user = userService.findById(id); model.addAttribute("userRequest", user); return "user/view"; } /** * 社員編集画面を表示 * @param id 表示する社員ID * @param model Model * @return 社員編集画面 */ @GetMapping("/user/{id}/edit") public String displayEdit(@PathVariable Long id, Model model) { User user = userService.findById(id); UserUpdateRequest userUpdateRequest = new UserUpdateRequest(); userUpdateRequest.setId(user.getId()); userUpdateRequest.setName(user.getName()); userUpdateRequest.setBirthday(user.getBirthday()); userUpdateRequest.setAddress(user.getAddress()); userUpdateRequest.setPhone(user.getPhone()); userUpdateRequest.setDepartment(user.getDepartment()); model.addAttribute("userUpdateRequest", userUpdateRequest); return "user/edit"; } /** * 社員更新 * @param userRequest リクエストデータ * @param model Model * @return 社員情報詳細画面 */ @RequestMapping(value="/user/update", method=RequestMethod.POST) public String update(@Validated @ModelAttribute UserUpdateRequest userUpdateRequest, BindingResult result, Model model) { if (result.hasErrors()) { List<String> errorList = new ArrayList<String>(); for(ObjectError error : result.getAllErrors()) { errorList.add(error.getDefaultMessage()); } model.addAttribute("validationError", errorList); return "user/edit"; } // 社員情報の更新 userService.update(userUpdateRequest); return String.format("redirect:/user/%d", userUpdateRequest.getId()); } /** * 社員情報削除 * @param id 表示する社員番号 * @param model Model * @return 社員情報詳細画面 */ @GetMapping("/user/{id}/delete") public String delete(@PathVariable Long id, Model model) { // 社員情報の削除 userService.delete(id); return "redirect:/user/list"; } }
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; /** * 社員情報 Repository */ @Repository public interface UserRepository extends JpaRepository<User, Long> {}
package com.example.demo; import java.io.Serializable; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import lombok.Data; import lombok.EqualsAndHashCode; /** * ユーザー情報 リクエストデータ */ @Data @EqualsAndHashCode(callSuper=false) public class UserRequest implements Serializable { /** * 名前 */ @NotEmpty(message = "名前を入力してください") @Size(max = 100, message = "名前は100桁以内で入力してください") private String name; /** * 生年月日 */ @Pattern(regexp = "\d{4}-\d{2}-\d{2}", message = "生年月日の形式で入力してください") private String birthday; /** * 住所 */ @NotEmpty(message = "住所を入力してください") @Size(max = 255, message = "住所は255桁以内で入力してください") private String address; /** * 電話番号 */ @Pattern(regexp = "0\d{1,4}-\d{1,4}-\d{4}", message = "電話番号の形式で入力してください") private String phone; /** * 部門 */ @NotEmpty(message = "部門を入力してください") private String department; }
package com.example.demo; import java.io.Serializable; import lombok.Data; /** * 社員情報 検索用リクエストデータ */ @Data public class UserSearchRequest implements Serializable { /** * 社員ID */ private Long id; }
package com.example.demo; import java.util.List; import javax.transaction.Transactional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * 社員情報 Service */ @Service @Transactional(rollbackOn = Exception.class) public class UserService { /** * 社員情報 Repository */ @Autowired private UserRepository userRepository; /** * ユーザー情報 全検索 * @return 検索結果 */ public List<User> searchAll() { return userRepository.findAll(); } /** * 社員情報 新規登録 * @param user 社員情報 */ public void create(UserRequest userRequest) { userRepository.save(CreateUser(userRequest)); } /** * ユーザー情報 主キー検索 * @return 検索結果 */ public User findById(Long id) { return userRepository.findById(id).get(); } /** * 社員TBLエンティティの生成 * @param userRequest 社員情報リクエストデータ * @return 社員TBLエンティティ */ private User CreateUser(UserRequest userRequest) { User user = new User(); user.setName(userRequest.getName()); user.setBirthday(userRequest.getBirthday()); user.setAddress(userRequest.getAddress()); user.setPhone(userRequest.getPhone()); user.setDepartment(userRequest.getDepartment()); return user; } /** * 社員情報 更新 * @param user 社員情報 */ public void update(UserUpdateRequest userUpdateRequest) { User user = findById(userUpdateRequest.getId()); user.setName(userUpdateRequest.getName()); user.setBirthday(userUpdateRequest.getBirthday()); user.setAddress(userUpdateRequest.getAddress()); user.setPhone(userUpdateRequest.getPhone()); user.setDepartment(userUpdateRequest.getDepartment()); userRepository.save(user); } /** * ユーザー情報 物理削除 * @param id ユーザーID */ public void delete(Long id) { User user = findById(id); userRepository.delete(user); } }
package com.example.demo; import java.io.Serializable; import com.sun.istack.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; /** * 社員情報更新リクエストデータ * */ @Data @EqualsAndHashCode(callSuper=false) public class UserUpdateRequest extends UserRequest implements Serializable { /** * 社員ID */ @NotNull private Long id; }
### ディレクトリ ![イメージ説明](6300452c08bcf07bf399dcd4536b676d.png) ### 補足情報(FW/ツールのバージョンなど) eclipseを使用。 ※文字数が足りないため、下にHTMLとpom.xmlを記載します。