Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di ubisum
    Registrato dal
    Mar 2007
    Messaggi
    22

    Spring Boot: CRUD Repository a volte nullo

    Salve a tutti.
    Ho realizzato una classe Java in Spring che espone servizi REST:
    codice:
    package it.CarsDB.boot.service;
    
    
    import java.util.List;
    
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    
    import it.CarsDB.boot.DAO.ResellerInterface;
    import it.CarsDB.boot.model.Reseller;
    import it.CarsDB.boot.utilities.CSVReader;
    
    
    @RestController
    @CrossOrigin
    @RequestMapping("/Reseller")
    public class ResellerController {
        @Autowired
        private ResellerInterface repository;
        private boolean dbPopulated = false;
        
        private void insertResellers(String csv_path)
        {
            // read files
            List<List<String>> resellersData = CSVReader.readFile(csv_path);
            
            // insert resellers
            for(int index = 1; index<resellersData.size(); index++)
            {
                // data of a single reseller
                List<String> resellerStrings = resellersData.get(index);
                
                // populate bean
                Reseller reseller = new Reseller();
                reseller.setName(resellerStrings.get(0));
                reseller.setSurname(resellerStrings.get(1));
                reseller.setEmail(resellerStrings.get(2));
                reseller.setSsn(resellerStrings.get(3));
                
                // insert reseller
                repository.save(reseller);
            }
            
        }
        
        @RequestMapping(value = "/getModel", method = RequestMethod.GET)
        public Reseller getModel() {
            return new Reseller();
        }
        
        @RequestMapping(value = "/insertReseller", method = RequestMethod.POST)
        public ResponseEntity<Reseller> saveReseller(@RequestBody Reseller reseller)
        {
            try {
                repository.save(reseller);
                return new ResponseEntity<>(reseller, HttpStatus.CREATED);
            }
    
    
            catch (Exception e) {
                return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
            }
    
    
        }
        
        
        @RequestMapping(value = "/findReseller{ssn}", method = RequestMethod.GET)
        public /*ResponseEntity<Reseller>*/ Reseller findResellerBySsn(@PathVariable("ssn") String ssn)
        {
            try
            {
                if(!dbPopulated)
                {
                    insertResellers("src/main/resources/datasets/people_data.csv");
                    System.out.println("DB populated");
                    dbPopulated = true;
                }
                
                Reseller reseller = repository.findBySsn(ssn).get(0);
                if(reseller != null)
                    //return new ResponseEntity<>(reseller, HttpStatus.FOUND);
                    return reseller;
                
                else
                    //return new ResponseEntity<>(HttpStatus.NO_CONTENT);
                    return null;
                
            }
            
            catch(Exception e)
            {
                //return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
                return null;
            }
        }
        
    
    
    
    
    }
    Qui tutto funziona correttamente.
    Soprattutto, l'interfaccia repository definita come
    codice:
    package it.CarsDB.boot.DAO;
    
    
    import java.util.List;
    
    
    import org.springframework.data.repository.CrudRepository;
    
    
    import it.CarsDB.boot.model.Reseller;
    
    
    public interface ResellerInterface extends CrudRepository<Reseller, String> {
        public List<Reseller> findBySsn(String ssn);
    }
    viene correttamente inizializzata.
    Tuttavia, se si crea una normale classe, il cui scopo è avere semplicemente dei metodi per il popolamento del DB (quindi, nessun servizio REST), con la medesima dichiarazione
    codice:
    @Autowired
    private ResellerInterface repository;
    tale variabile risulta sempre non inizializzata (è sempre posta a null) e non è possibile utilizzarla per inserire i dati nel DB.
    Come mai?
    Esiste un modo per poterla far funzionare anche in quest'altro ambito?

    Grazie.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Java ha una sezione dedicata.

    Sposto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.