当我尝试在CRUD Spring启动应用程序中添加新客户端时,捕获到NullPointerException

问题描述 投票:0回答:1

我正在使用Spring Boot,Spring MVC和Spring Data JPA做一个CRUD Web应用程序。我想通过添加新客户端在主类中测试代码。它返回一个NullPointerException。我已经使用调试模式检查了我的代码。老实说,我看不出问题到底出在哪里,因此,如果有可能,将是一种荣幸。

实体类:

@Entity
@Table(name="cliente")
public class Cliente implements Serializable{

    @Id @GeneratedValue
    private Integer idCliente;
    private String iceCliente;
    private String nombreCliente;
    private String apellidoCliente;
    private String direccionCliente;
    private String telefonoCliente;
    private String emailCliente;
    private TipoCliente tipoCliente;
    private String cuidadCliente;

    public Cliente() {
        super();
    }

    public Cliente(String iceCliente, String nombreCliente, String apellidoCliente, String direccionCliente,
            String telefonoCliente, String emailCliente, TipoCliente tipoCliente, String cuidadCliente) {
        super();
        this.iceCliente = iceCliente;
        this.nombreCliente = nombreCliente;
        this.apellidoCliente = apellidoCliente;
        this.direccionCliente = direccionCliente;
        this.telefonoCliente = telefonoCliente;
        this.emailCliente = emailCliente;
        this.tipoCliente = tipoCliente;
        this.cuidadCliente = cuidadCliente;
    }

    public Integer getIdCliente() {
        return idCliente;
    }

    public void setIdCliente(int idCliente) {
        this.idCliente = idCliente;
    }

    public String getIceCliente() {
        return iceCliente;
    }

    public void setIceCliente(String iceCliente) {
        this.iceCliente = iceCliente;
    }

    public String getNombreCliente() {
        return nombreCliente;
    }

    public void setNombreCliente(String nombreCliente) {
        this.nombreCliente = nombreCliente;
    }

    public String getApellidoCliente() {
        return apellidoCliente;
    }

    public void setApellidoCliente(String apellidoCliente) {
        this.apellidoCliente = apellidoCliente;
    }

    public String getDireccionCliente() {
        return direccionCliente;
    }

    public void setDireccionCliente(String direccionCliente) {
        this.direccionCliente = direccionCliente;
    }

    public String getTelefonoCliente() {
        return telefonoCliente;
    }

    public void setTelefonoCliente(String telefonoCliente) {
        this.telefonoCliente = telefonoCliente;
    }

    public String getEmailCliente() {
        return emailCliente;
    }

    public void setEmailCliente(String emailCliente) {
        this.emailCliente = emailCliente;
    }

    public TipoCliente getTipoCliente() {
        return tipoCliente;
    }

    public void setTipoCliente(TipoCliente tipoCliente) {
        this.tipoCliente = tipoCliente;
    }

    public String getCuidadCliente() {
        return cuidadCliente;
    }

    public void setCuidadCliente(String cuidadCliente) {
        this.cuidadCliente = cuidadCliente;
    }

ClienteService:

@Service
@Transactional
public class ClienteServiceImpl implements ClienteService {

    @Autowired
    ClienteRepository clienteRepository;

    @Override
    public Cliente agregarCliente(Cliente cliente) {

        return clienteRepository.save(cliente);
    }

    @Override
    public Cliente editarCliente(Cliente cliente) {
        Optional<Cliente> clienteDB = this.clienteRepository.findById(cliente.getIdCliente());
        if (clienteDB.isPresent()) {
            Cliente clienteUpdate = clienteDB.get();
            clienteUpdate.setIdCliente(cliente.getIdCliente());
            clienteUpdate.setIceCliente(cliente.getIceCliente());
            clienteUpdate.setNombreCliente(cliente.getNombreCliente());
            clienteUpdate.setApellidoCliente(cliente.getApellidoCliente());
            clienteUpdate.setDireccionCliente(cliente.getDireccionCliente());
            clienteUpdate.setCuidadCliente(cliente.getCuidadCliente());
            clienteUpdate.setTelefonoCliente(cliente.getTelefonoCliente());
            clienteUpdate.setEmailCliente(cliente.getEmailCliente());
            clienteRepository.save(clienteUpdate);
            return clienteUpdate;
        } else {
            throw new RessourceNotFoundException(
                    "Cliente no encontrado con nombre de usuario : " + cliente.getIdCliente());
        }

    }

    @Override
    public List<Cliente> obtenerCliente() {

        return this.clienteRepository.findAll();
    }

    @Override
    public void removeCliente(Integer idCliente) {

        Optional<Cliente> clienteDB = this.clienteRepository.findById(idCliente);

        if (clienteDB.isPresent()) {
            this.clienteRepository.delete(clienteDB.get());
        } else {
            throw new RessourceNotFoundException("Cliente no encontrado con nombre de usuario : " + idCliente);
        }

    }

    @Override
    public Cliente obtenerClientePorId(Integer idCliente) {

        Optional<Cliente> clienteDB = this.clienteRepository.findById(idCliente);

        if (clienteDB.isPresent()) {
            return clienteDB.get();
        } else {
            throw new RessourceNotFoundException("Cliente no encontrado con nombre de usuario : " + idCliente);
        }

    }

ClienteRepository:

@Repository
public interface ClienteRepository extends JpaRepository<Cliente, Integer> {

}

ClienteController:

@RestController
//@RequestMapping("/index")
public class ClienteController {

    @Autowired
    private ClienteService clienteService;

    @GetMapping("/clientes")
    public ResponseEntity<List<Cliente>> obtenerCliente() {
        return ResponseEntity.ok().body(clienteService.obtenerCliente());
    }

    @GetMapping("/clientes/{id}")
    public ResponseEntity<Cliente> obtenerClientePorId(@PathVariable Integer idCliente) {
        return ResponseEntity.ok().body(clienteService.obtenerClientePorId(idCliente));
    }

    @PostMapping("/clientes")
    public ResponseEntity<Cliente> agregarCliente(@RequestBody Cliente cliente) {
        return ResponseEntity.ok().body(this.clienteService.agregarCliente(cliente));
    }

    @PutMapping("/clientes/{id}")
    public ResponseEntity<Cliente> editarCliente(@PathVariable Integer idCliente, @RequestBody Cliente cliente) {
        cliente.setIdCliente(idCliente);
        return ResponseEntity.ok().body(this.clienteService.editarCliente(cliente));
    }

    @DeleteMapping("/clientes/{id}")
    public HttpStatus removeCliente(@PathVariable Integer idCliente) {
        this.clienteService.removeCliente(idCliente);
        return HttpStatus.OK;
    }

Main class:

@SpringBootApplication
//@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class NestideasFacturasApplication {

    @Autowired
    public static ClienteService clienteService = new ClienteServiceImpl();

    public static void main(String[] args) {
        SpringApplication.run(NestideasFacturasApplication.class, args);
        System.out.println("Application démarrée");



        System.out.println(clienteService);

        clienteService.agregarCliente(new Cliente("16565465", "Hassan", "JROUNDI", "Said Hajji", "0662165537",
                "[email protected]", TipoCliente.EMPREZA, "Salé"));

        System.out.println(clienteService);

    }

Stacktrace:

Stacktrace

java spring spring-boot spring-mvc spring-data-jpa
1个回答
0
投票

First,对于您的测试方案,最好使用ApplicationRunner

ApplicationRunner中实施NestideasFacturasApplication并覆盖run方法,然后将测试方案写入run

代码

@SpringBootApplication
public class NestideasFacturasApplication  implements ApplicationRunner {


    public static void main(String[] args) {

        SpringApplication.run(NestideasFacturasApplication.class, args);

    }


    @Override
    public void run(ApplicationArguments args) {

      //Your test scenario ...          

    }
}

第二,如下所示更改ClienteService的注入

@Autowired
private ClienteService clienteService;

所以我们有(整个代码)

@SpringBootApplication
public class NestideasFacturasApplication implements ApplicationRunner {

    @Autowired
    private ClienteService clienteService;

    public static void main(String[] args) {
        SpringApplication.run(NestideasFacturasApplication.class, args);
    }


    @Override
    public void run(ApplicationArguments args) {

        //Your test scenario
        System.out.println("Application démarrée");
        System.out.println(clienteService);

        clienteService.agregarCliente(new Cliente("16565465", "Hassan", "JROUNDI", "Said Hajji", "0662165537", "[email protected]", TipoCliente.EMPREZA, "Salé"));

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.