Error when deploying Spring Boot Rest Simple. Java,

0

I have been doing a simple exercise of a web service implementing Spring Boot. However I have a problem compiling using Spring Tool 3.9.6.RELEASE in Eclipse Photon.

I enclose the code, at the end the exception is added.

SpringRestMySqlApplication.java

package com.unbosque.edu.webservice.proyecto;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

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

UserController.java

package com.unbosque.edu.webservice.proyecto.controlador;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

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.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.unbosque.edu.webservice.proyecto.modelo.Usuario;
import com.unbosque.edu.webservice.proyecto.repositorio.UsuarioRepositorio;


@CrossOrigin(origins = "http://localhost:8081")
@RestController
@RequestMapping("/proyecto")
public class UsuarioControlador {

@Autowired
UsuarioRepositorio repositorio;

@GetMapping("/usuarios/obtener/todos")
public List<Usuario> obtenerTodosLosUsuarios(){
    List<Usuario> usuarios = new ArrayList<>();
    repositorio.findAll().forEach(usuarios::add);
    return usuarios;
}

@PostMapping("/usaurios/crear")
public Usuario crearUsuario(@RequestBody Usuario usuario) {
    Usuario usuario2 = repositorio.save(new Usuario(usuario.getCedula(),     usuario.getContrasena(), usuario.getTipo()));
    return usuario2;
}

@DeleteMapping("/usuarios/eliminar/{cedula}/")
public ResponseEntity<String> eliminarUsuario(@PathVariable("cedula") int cedula){
    repositorio.deleteById(cedula);
    return new ResponseEntity("El usuario" + cedula + " fue eliminado.", HttpStatus.OK);
}

@DeleteMapping("/usuarios/eliminar/todos")
public ResponseEntity<String> eliminarTodosLosUsuario(){
    repositorio.deleteAll();
    return new ResponseEntity("Todos los usuarios fueron eliminados.", HttpStatus.OK);
}

@GetMapping("/usuarios/cedula/{cedula}")
public List<Usuario> buscarPorCedula(@PathVariable("cedula") int cedula){
    List<Usuario> usuarios = repositorio.buscarPorCedula(cedula);
    return usuarios;
}

@PutMapping("/usuarios/actualizar/{idUsuario}")
public ResponseEntity<Usuario> actualizarUsuario(@PathVariable("cedula") int cedula, @RequestBody Usuario usuario){
    Optional<Usuario> usuarioData = repositorio.findById(cedula);

    if(usuarioData.isPresent()) {
        Usuario usuario2 = usuarioData.get();
        usuario2.setCedula(usuario.getCedula());
        usuario2.setContrasena(usuario.getContrasena());
        usuario2.setTipo(usuario.getTipo());
        return new ResponseEntity<>(repositorio.save(usuario2), HttpStatus.OK);
    } else {
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
}
}

Repository User.java

package com.unbosque.edu.webservice.proyecto.repositorio;

import java.util.List;

import org.springframework.data.repository.CrudRepository;

import com.unbosque.edu.webservice.proyecto.modelo.Usuario;

public interface UsuarioRepositorio extends CrudRepository<Usuario, Integer>    {
    List<Usuario> buscarPorCedula(int cedula);
}

User.java

package com.unbosque.edu.webservice.proyecto.modelo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="Usuario")
public class Usuario {

@Id
@Column(name="cedula")
private int cedula;

@Column(name="contrasena")
private String contrasena;

@Column(name="tipo")
private int tipo;

public Usuario() {
}

public Usuario(int cedula, String contrasena, int tipo) {
    this.cedula = cedula;
    this.contrasena = contrasena;
    this.tipo = tipo;
}

public int getCedula() {
    return cedula;
}

public void setCedula(int cedula) {
    this.cedula = cedula;
}

public String getContrasena() {
    return contrasena;
}

public void setContrasena(String contrasena) {
    this.contrasena = contrasena;
}

public int getTipo() {
    return tipo;
}

public void setTipo(int tipo) {
    this.tipo = tipo;
}
}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.unbosque.edu.webservice</groupId>
<artifactId>proyecto</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>proyecto</name>
<url>http://maven.apache.org</url>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <version>2.0.5.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.0.5.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.12</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <version>2.0.5.RELEASE</version>
        <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.3.6.Final</version>
    </dependency>


</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
</project>

application.properties

spring.datasource.username=root
spring.datasource.password=7834426
spring.jpa.generate-ddl=true
spring.datasource.url=jdbc:mysql://localhost:3306/usuarios?useSSL=false

Exceptions when compiled by the Spring Tool App

Error Starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2018-10-08 22: 01: 20.778 ERROR 15764 --- [main] o.s.boot.SpringApplication: Application run failed ...

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List com.unbosque.edu.webservice.project.repository.UserRepository.buscarPorCedula (int)! No property searchByCedula found for type User!     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1699) ~ [spring-beans-5.0.9.RELEASE.jar: 5.0.9.RELEASE] ...

Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List com.unbosque.edu.webservice.project.repository.UserRepository.buscarPorCedula (int)! No property searchByCedula found for type User!     at org.springframework.data.jpa.repository.query.PartTreeJpaQuery. (PartTreeJpaQuery.java:82) ~ [spring-data-jpa-2.0.10.RELEASE.jar: 2.0.10.RELEASE] ...

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property searchByCalculate found for type User!     at org.springframework.data.mapping.PropertyPath. (PropertyPath.java:94) ~ [spring-data-commons-2.0.10.RELEASE.jar: 2.0.10.RELEASE] ...

I appreciate a notation for the problem I'm committing.

    
asked by mb0 09.10.2018 в 05:07
source

1 answer

2

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property buscarPorCedula found for type Usuario

Spring JPA uses certain conventions for the names of the methods of your repositories. If you want to have a method to search for the attribute cedula of your User class, without having to declare the query to be executed, what you have to do is call it findByCedula . Come on, your repository would look like this:

package com.unbosque.edu.webservice.proyecto.repositorio;

import java.util.List;

import org.springframework.data.repository.CrudRepository;

import com.unbosque.edu.webservice.proyecto.modelo.Usuario;

public interface UsuarioRepositorio extends CrudRepository<Usuario, Integer> {
    List<Usuario> findByCedula(int cedula);
}

If you really need the method to be called buscarPorCedula , then you have to provide the query to Spring so you know how to resolve that query. For that, you have to write down the method with @Query and it would look something like this:

@Query("SELECT u FROM Usuario u where u.cedula = ?1")
List<Usuario> buscarPorCedula(int cedula);
    
answered by 09.10.2018 / 07:37
source