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.