Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我尝试在CRUD Spring启动应用程序中添加新客户端时,捕获到NullPointerException_Java_Spring_Spring Boot_Spring Mvc_Spring Data Jpa - Fatal编程技术网

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

Java 当我尝试在CRUD Spring启动应用程序中添加新客户端时,捕获到NullPointerException,java,spring,spring-boot,spring-mvc,spring-data-jpa,Java,Spring,Spring Boot,Spring Mvc,Spring Data Jpa,我正在使用SpringBoot、SpringMVC和SpringDataJPA做一个CRUDWeb应用程序。我想通过添加一个新的客户机在主类中测试我的代码。它返回一个NullPointerException。我已经用调试模式检查了我的代码。老实说,我不知道问题到底出在哪里,所以,如果能帮上忙,那将是一件愉快的事 实体类: @Entity @Table(name="cliente") public class Cliente implements Serializable{ @Id @G

我正在使用SpringBoot、SpringMVC和SpringDataJPA做一个CRUDWeb应用程序。我想通过添加一个新的客户机在主类中测试我的代码。它返回一个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;
    }
@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);
        }

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

}
@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;
    }
@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",
                "hassan.jroundi@outlook.fr", TipoCliente.EMPREZA, "Salé"));

        System.out.println(clienteService);

    }
客户服务:

@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;
    }
@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);
        }

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

}
@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;
    }
@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",
                "hassan.jroundi@outlook.fr", TipoCliente.EMPREZA, "Salé"));

        System.out.println(clienteService);

    }
堆栈跟踪:

首先,对于您的测试场景,最好使用
ApplicationRunner

nestieasfacturasapplication
必须实现
ApplicationRunner
,并重写
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 ...          

    }
}
第二个,更改客户服务的注入,如下所示

所以我们有(整个代码)


不要将它们注入
nestieasfacturasapplication
类。创建另一个,相当确定这在
生命周期
中太早,无法注入它们。这是错误的:
@Autowired public static ClienteService ClienteService=new ClienteServiceImpl()外部应用程序上下文。如果你想这样做,那么你应该得到
ApplicationContext
请求一个名为
cliendserviceinpl
的bean,然后使用它……刚刚测试过,同样的异常。感谢您的快速回复。我怀疑您能否在BootStarter主类中注入bean,因为这在应用程序上下文生命周期的早期。考虑在主应用程序监听器中使用移动逻辑,而不是手动创建客户机。请原谅,伙计们,我对java EE及其框架不太有能力。我实际上正在接受培训,老实说,有些术语对我来说是陌生的。如果你们有可能解释更多你们的建议,我会侦察。非常感谢。啊!你救了我一个晚上。我终于可以完成项目的前半部分了。非常感谢你的帮助,我很感激。