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.

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]
vous remarquez que la méthode retourne l'adresse email sans ".com".


sachant que mon code est comme suivant :

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";
 
     	}
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
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);	
 
	}
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.

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