前提・実現したいこと
SpringBootで年齢の範囲検索に一致するデータを表示する機能を作成しています。
入力された値をコントローラーで受け取り、サービスクラスに飛ばして一致するデータを検索しています。
ただ、入力項目が無い時に以下のエラーが発生します。
実現したい事として、入力が無ければ年齢の下限は0、年齢の上限は99になって検索する処理にしたいです。
発生している問題・エラーメッセージ
java.lang.NumberFormatException: For input string: "downage"
該当のソースコード
Service
1package com.×××.springboot; 2 3import java.util.List; 4 5import javax.persistence.EntityManager; 6import javax.persistence.PersistenceContext; 7import javax.persistence.Query; 8import javax.persistence.criteria.CriteriaBuilder; 9import javax.persistence.criteria.CriteriaQuery; 10import javax.persistence.criteria.Root; 11 12import org.springframework.stereotype.Service; 13 14@Service 15public class Service { 16 17 @PersistenceContext 18 private EntityManager entityManager; 19 20 @SuppressWarnings("unchecked") 21 public List<エンティティ名> getAll() { 22 return (List<エンティティ名>) entityManager.createQuery("from テーブル").getResultList(); 23 } 24 25 @SuppressWarnings("unchecked") 26 public List<エンティティ名> findByAge(int downage, int upage) { 27 return (List<エンティティ名>)entityManager 28 .createQuery("from テーブル名 where age >= :downage and age <= :upage") 29 .setParameter("downage", downage) 30 .setParameter("upage", upage) 31 .getResultList(); 32 } 33 34}
Controller
1package com.×××.springboot; 2 3//文字数の都合上、import関連は省略します。 4 5@Controller 6public class Controller { 7 8 @Autowired 9 Repository repository; 10 11 @Autowired 12 private Service service; 13 14 @PersistenceContext 15 EntityManager entityManager; 16 17 @RequestMapping(value = "/html", method = RequestMethod.GET) 18 public ModelAndView html(ModelAndView mav) { 19 mav.setViewName("age"); 20 mav.addObject("msg", "年齢検索画面です!"); 21 mav.addObject("value", ""); 22 Iterable<Age> list = dao.getAll(); 23 mav.addObject("datalist", list); 24 return mav; 25 } 26 27// 年齢の範囲検索機能 28 public ModelAndView searchAge(HttpServletRequest request, 29 ModelAndView mav) { 30 mav.setViewName("age"); 31 mav.addObject("msg", "検索結果です!"); 32 int downage = 0; 33 int upage = 99; 34 downage = Integer.parseInt(request.getParameter("downage")); 35 upage = Integer.parseInt(request.getParameter("upage")); 36 if( downage == upage ){ 37 mav = new ModelAndView("redirect:/html"); 38 }else{ 39 mav.addObject("value", ""); 40 Iterable<Age> list = service.findByAge(downage, upage); 41 mav.addObject("datalist", list); 42 } 43 return mav; 44 45 } 46}
html
1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4 <title>top page</title> 5 <meta http-equiv="Content-Type" 6 content="text/html; charset=UTF-8" /> 7</head> 8<body> 9 <h1 th:text="#{content.title}"></h1> 10 <p th:text="${msg}">ようこそ!</p> 11 <table> 12 <form action="/html" method="post" > 13 <tr><td><label for="age">年齢</label></td> 14 <td> 15 <input type="text" name="downage" size="2" /> 16 </td> 17 <td>~</td> 18 <td> 19 <input type="text" name="upage" size="2" />歳 20 </td></tr> 21 <td> 22 <input type="submit" name="kensaku" value="検索" /> 23 </td> 24 </tr> 25 </form> 26 </table> 27 <table> 28 <tr><th><th>年齢</th> 29 <tr th:each="obj : ${datalist}"> 30 <td th:text="${obj.age}"></td> 31 </tr> 32 <tr> 33 <td> 34 <input type="submit" name="return" value="戻る" /> 35 </td> 36 </tr> 37 </table> 38</body> 39
試したこと
・intで取得するageの値をString.valueOfなどでString型へ変換。
その後、ageがnullだった時の処理を記載。
補足情報(FW/ツールのバージョンなど)
STS 3.9.2
maven 3.6.0
JDK 8
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/07 08:59
2019/02/07 09:01
2019/02/07 10:28 編集
2019/02/07 11:24
2019/02/08 01:50
2019/02/08 01:56