Bonjour,
J'utilise le JdbcDaoSupport pour interroger un objet (employe) avec un attribut Login sous forme une adresse e-mail.
J'utilise la méthode queryForObject ...
Cela fonctionne bien quand je fixe l'adresse e-mail du login statiquement dans le code, le résulat peut être trouvé dans la base de données.
Si je fais mon code normal, aucun emplyeur avec l'adresse e-mail spécifiée peut être trouvé, donc je reçois l'exception suivante.
vous remarquez que la méthode retourne l'adresse email sans ".com".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 INFOS: Server startup in 3811 ms 2016-06-17 09:30:57 [http-apr-8080-exec-3] DEBUG c.o.s.controleur.HomePageController - showUser() login: test_login@gmail 2016-06-17 09:31:00 [http-apr-8080-exec-3] ERROR c.o.s.dao.JdbcEmployeDaoSupport - getEmployeByLogin , login = test_login@gmail 2016-06-17 09:32:11 [http-apr-8080-exec-3] DEBUG c.o.s.controleur.HomePageController - handleEmptyData() 2016-06-17 09:32:11 [http-apr-8080-exec-3] ERROR c.o.s.controleur.HomePageController - Request: http://localhost:8080/Demo.spring3.mvc.jdbc/emplshowlogin/test_login@gmail.com, error org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0 at org.springframework.dao.support.DataAccessUtils.requiredSingleResult(DataAccessUtils.java:71) ~[spring-tx-3.2.2.RELEASE.jar:3.2.2.RELEASE] at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:732) ~[spring-jdbc-3.2.2.RELEASE.jar:3.2.2.RELEASE]
sachant que mon code est comme suivant :
et coté DAO :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 // show employe by login @RequestMapping(value = "/emplshowlogin/{login}", method = RequestMethod.GET) public String showUserbylogin(@PathVariable("login") String login, Model model) { logger.debug(" showUser() login: {}", login); Employe empl = employeManager.getEmploye(login); if (empl == null) { model.addAttribute("msg", "employe not found"); } model.addAttribute("empl", empl); return "show"; }
Maintenant, il estime que ce n'est pas la bonne approche, il doit y avoir un moyen plus propre pour gérer URL contenant comme param une valeur sous forme d'un email.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 public Employe getEmployeByLogin(String login) { // TODO recuperation d'un employe en fonction de son login RowMapper mapper = null; logger.error(" getEmployeByLogin , login = {}", login); String sql = "select * from employe where login = ?"; //String sql = "select * from employe where login = 'test@gmail.com' and nom = ? "; // Ca Marche bien try { // Mapping d'un enregistrement vers un ResultSet mapper = new RowMapper() { public Object mapRow(ResultSet rs, int rowNum) throws SQLException { Employe empl = new Employe(); empl.setId(rs.getInt("id")); empl.setLogin(rs.getString("login")); //empl.setPassword(rs.getString("password")); empl.setNom(rs.getString("nom")); empl.setPrenom(rs.getString("prenom")); empl.setEmail(rs.getString("email")); return empl; } }; } catch (EmptyResultDataAccessException e) { // do nothing, return null } return (Employe) getJdbcTemplate().queryForObject( sql , new Object[] { login }, mapper); }
Je n'aime pas l'exception des captures et retourne la méthode null.
Y at-il une autre façon de gérer ce genre de situation?
Merci d'avance.
Cordialement
Mohamed EL BAB
Partager