2017-06-08 3 views
0

ich diesen Code schrieb:Nullpointer beim Anschließen Spring MVC postgres

Controller:

@Controller 
@RequestMapping("/groups") 
public class GroupController { 

    @Autowired 
    private GroupService groupService; 

    @RequestMapping 
    public String list(Model model) { 
     model.addAttribute("groups", groupService.getAllGroups()); 
     return "groups"; 
    } 
} 

dbConnect

public class dbConnect { 

    public dbConnect(){} 

    private JdbcTemplate jdbcTemplate; 

    public JdbcTemplate getJdbcTemplate() { 
     return jdbcTemplate; 
    } 
    public void DatabaseConnection(){ 
     DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource(); 
     driverManagerDataSource.setDriverClassName("org.postgresql.Driver"); 
     driverManagerDataSource.setUrl("jdbc:postgres://xxx"); 
     driverManagerDataSource.setUsername("x"); 
     driverManagerDataSource.setPassword("xss"); 
     this.jdbcTemplate=new JdbcTemplate(driverManagerDataSource); 
    } 
} 

Gruppe Repo-Schnittstelle

public interface GroupRepository { 

    List<Group> getAllGroups(); 
} 

Gruppe Repo Impl

@Repository 
public class InMemoryGroupRepository implements GroupRepository { 

    public InMemoryGroupRepository(){} 

    private dbConnect data; 

    //@Autowired 
    public InMemoryGroupRepository(dbConnect dbConnect) { 
     this.data = dbConnect; 
    } 


    public List<Group> getAllGroups() { 
     return data.getJdbcTemplate().query("SELECT id_grupy, nazwa, id_egzaminatora, haslo, egzaminatorzy_id_egzaminatora FROM grupy", new RowMapper<Group>() { 
      public Group mapRow(ResultSet rs, int rowNum) 
        throws SQLException { 
       Group group = new Group(); 
       group.setId_grupy(rs.getInt(1)); 
       group.setNazwa(rs.getString(2)); 
       group.setId_egzaminatora(rs.getInt(3)); 
       group.setHaslo(rs.getString(4)); 
       group.setEgzaminatorzy_id_egzaminatora(rs.getInt(5)); 
       return group; 
      } 
     }); 
    } 
} 

Group Service-Schnittstelle

public interface GroupService { 
    List<Group> getAllGroups(); 
} 

Group Service Impl

@Service 
public class GroupServiceImpl implements GroupService { 

    @Autowired 
    private GroupRepository groupRepository; 

    public List<Group> getAllGroups() { 
     return groupRepository.getAllGroups(); 
    } 
} 

Wenn ich geben versuchen "/ Gruppen" Ich habe diesen Fehler: error

denke ich, dass die Problem ist, dass Datenbankverbindung nicht hergestellt werden kann. Wir haben fast jeden möglichen Fehler ausgeschlossen. Wir haben versucht, ArrayList anstelle der Datenbank zu verwenden, und es hat gut funktioniert. Wie kann ich es reparieren?

+0

Was ist die URL Ihrer Datenbank? Ich sehe Ihre URL ist: 'driverManagerDataSource.setUrl (" jdbc: postgres: // xxx ");' ist es in korrekter Syntax? [Siehe hierzu] (https://www.mkyong.com/jdbc/how-do-connect-to-postgresql-with-jdbc-driver-java/) um Setup jdbc mit Postgre –

+0

zu wissen Überprüfen Sie den Port, 5432 ist Standard für Postgres –

+0

Haben Sie versucht mit @Bean statt @Autowired? – German

Antwort

1

Sie haben einen Fehler in Ihrer DB-Konfiguration. dbConnect Klasse wird nicht von Spring verwaltet und deshalb erhalten Sie NPE, da es nicht in Ihr Repository injiziert wird. Ich schlage vor, mit Konfiguration unter:

@Configuration 
class PersistenceConfig { 

    @Bean 
    public DataSource dataSource() { 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     dataSource.setDriverClassName("org.postgresql.Driver"); 
     dataSource.setUrl("jdbc:postgres://xxx"); 
     dataSource.setUsername("x"); 
     dataSource.setPassword("xss"); 

     return dataSource; 
    } 

    @Bean 
    public JdbcTemplate jdbcTemplate(DataSource dataSource) { 
     return new JdbcTemplate(dataSource); 
    } 

} 

und Repository-Implementierung:

@Repository 
public class GroupPostgresRepository implements GroupRepository { 

    private final JdbcTemplate jdbcTemplate; 

    public GroupPostgresRepository(JdbcTemplate jdbcTemplate) { 
     this.jdbcTemplate = jdbcTemplate; 
    } 

    public List<Group> getAllGroups() { 
     final String sql = "SELECT id_grupy, nazwa, id_egzaminatora, haslo, egzaminatorzy_id_egzaminatora FROM grupy"; 

     return jdbcTemplate.query(sql, (rs, rowNum) -> { 
      Group group = new Group(); 
      group.setId_grupy(rs.getInt(1)); 
      group.setNazwa(rs.getString(2)); 
      group.setId_egzaminatora(rs.getInt(3)); 
      group.setHaslo(rs.getString(4)); 
      group.setEgzaminatorzy_id_egzaminatora(rs.getInt(5)); 
      return group; 
     }); 
    } 

} 
Verwandte Themen