Antes de empezar

1

Pasos para aprender Java Spring

2

驴Java sigue siendo gratuito?

3

Instalaci贸n de ambiente de desarrollo: Linux Ubuntu

4

Instalaci贸n de ambiente de desarrollo: macOS

5

Instalaci贸n de ambiente de desarrollo: Windows

Introducci贸n a Spring boot

6

驴Qu茅 es y qu茅 usaremos de Spring?

7

Conocer qu茅 es una aplicaci贸n autocontenida

8

Crear nuestra aplicaci贸n con Spring Initializr

9

Hola mundo con Spring Boot

10

Configurar Spring Boot

11

Crear la estructura del proyecto

Spring Data

12

驴Qu茅 es JPA?

13

Conocer qu茅 es Spring Data

14

Conectar la base de datos a nuestra aplicaci贸n

15

Mapear las tablas como clases

16

Crear Entity cuando su clave primaria es compuesta

17

Mapear relaciones entre clases

18

Usar la interface CrudRepository

19

Query Methods

Construyendo nuestra API

20

Implementar la anotaci贸n @Repository

21

驴Qu茅 es el patr贸n Data Mapper y qu茅 resuelve?

22

Orientar nuestra API al dominio con MapStruct

23

Orientar nuestro repositorio a t茅rminos del dominio

24

Inyecci贸n de dependencias

25

Implementar la anotaci贸n @Service

26

Implementar la anotaci贸n @RestController

27

Exponer nuestra API

Mejorando nuestra API

28

Controlar las respuestas HTTP

29

Crear el dominio de compras

30

Mapear el dominio de compras

31

Crear el repositorio de compras

32

Probando nuestros servicios de compras

33

Documentar nuestra API con Swagger

Spring Security

34

Configurar la seguridad de nuestra API con Spring Security

35

Generar un JWT

36

Autenticaci贸n con JWT

37

Autorizaci贸n con JWT

Despliegue de nuestra aplicaci贸n

38

Desplegar nuestra API desde la ventana de comandos

39

Desplegar nuestra base de datos con Heroku

40

Desplegar nuestra API con Heroku

41

Conclusiones y despedida del curso

A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Curso de Java Spring

Curso de Java Spring

Alejandro Ram铆rez

Alejandro Ram铆rez

Probando nuestros servicios de compras

32/41
Recursos

Aportes 24

Preguntas 20

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

si alguno le sale este error Caused by: org.postgresql.util.PSQLException: Bad value for type int : 3104583224 al tratar de consultar el servicio all de compras, deben cambiar el tipo de dato del campo celular de la clase Entity Cliente.java pasando de Integer a Long y por consiguiente tambien cambiar los metodos Getter y Setter del mismo:

private Long celular;

public Long getCelular() {
	return celular;
}

public void setCelular(Long celular) {
	this.celular = celular;
}

Alguien me puede decir por que me marca este error?

Caused by: org.postgresql.util.PSQLException: ERROR: el operador no existe: character varying = integer

este es mi codigo https://github.com/kreytos23/API_Spring

Si alguno tiene este error:
org.postgresql.util.PSQLException: ERROR: no existe la relaci锟絥 锟絚ompras_producto锟
Revisen los nombres de las tablas en las anotaciones @Table de los entities. En mi caso ten铆a mapeada la tabla compras_productos como compras_producto, sin la s. En el entity de ComprasProducto.

Hola compa帽eros aprendices.
Quiero mostrarles un detalle menor, pero ello me llev贸 tiempo descubrirlo y corregirlo.
El error como se aprecia esta en la importaci贸n de la clase incorrecta.
![](
Ojala a nadie m谩s le haya pasado.

Buenos d铆as compa帽eros yo tuve el siguiente problema al querer obtenere mi lista de compras:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.platzi.supermercado.persistence.entity.Compra.productos, could not initialize proxy - no Session

Este problema seg煤n investigue es por que se cierra la sesi贸n de hibernate antes de recuperar la lista de compras_productos, para esto hay dos soluciones la primera es un peque帽o hack que debemos recuperar la lista antes de cerrar la sesi贸n con el metodo size();

Y la segunda es colocar la anotaci贸n EAGER, espero que les ayude

@OneToMany(mappedBy = "compra", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<ComprasProducto> productos;

Al momento de mostrar el purchases/all y se consulta el puchaseId 2 que fue la segunda compra creada, en el arreglo de items aparece vaci贸 como si no se hubiera asociado ning煤n producto. A alguien mas le paso?

Tengo el siguiente error en Postman y el metodo save tiene el @PostMapping("/save"), no se cual sea mi error.

RECORDATORIO: Si tenemos un error en las clases de los Mappers, verificar que todos los atributos de las clases de los Entities tengan sus respectivos Setters y Getters.
A mi me ocurri贸 eso.

Saludos a todos !!

Si a alguno le sale este error en la consola al consultar el /all de los purchases

Caused by: java.io.StreamCorruptedException: invalid stream header: 33313034

Tambien es debido al campo celular de la clase Cliente.java, deben cambiarlo de Number a Long y as铆 mismo modificar sus Getter and Setter

Buenas tardes, alguien mas le dio el siguiente error y si pudiera compartir como lo soluciono.

Caused by: org.postgresql.util.PSQLException: Bad value for type int : 3104583224
org.hibernate.exception.DataException: Could not read entity state from ResultSet : EntityKey[com.platzi.market.persistence.entity.Cliente#4546221]

Esto me lo muestra cuando intento consultar las compras

驴Alguien puede ayudarme con este problema?

2021-03-01 20:19:29.259 ERROR 3636 鈥 [nio-8090-exec-2] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/platzi-market/api] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: A different object with the same identifier value was already associated with the session : [com.platzi.market.persistence.entity.ComprasProducto#[email protected]]; nested exception is javax.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session : [com.platzi.market.persistence.entity.ComprasProducto#[email protected]]] with root cause

javax.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session : [com.platzi.market.persistence.entity.ComprasProducto#[email protected]]

Alguien que me ayude con este error?

Caused by: org.postgresql.util.PSQLException: ERROR: el operador no existe: character varying = integer

Porfavor gracias , ya hice private String idCliente; en la clase Compra.
???

Respecto al m茅todo getByClient() no deber铆a retornar estado 200 cuando se busca con un clientId que no exista en la base de datos, deber铆a ser el NOT_FOUND, es decir, cuando retorna una lista vacia esta poniendo el estado como OK, en vez de poner NOT_FOUND.

Paso lo mismo con el m茅todo getByCategory de la clase ProductController.

Creo que en vez de usar el .map, se deber铆a validar el tama帽o de la lista que viene desde el service.

Buenas!
Cual curso es mas recomendable. Este o el de Anahi Salgado?

ayuda, cuando hago el get all de purchases, me sale esto:

{
        "purchaseId": 1,
        "clientId": "4546221",
        "date": "1992-08-10T17:30:00",
        "paymentMethod": "E",
        "comment": "",
        "state": "P",
        "items": [
            {
                "id": {
                    "idCompra": 1,
                    "idProducto": 1
                },
                "cantidad": 10,
                "total": 3000.0,
                "estado": true,
                "compra": {
                    "idCompra": 1,
                    "idCliente": "4546221",
                    "fecha": "1992-08-10T17:30:00",
                    "medioPago": "E",
                    "comentario": "",
                    "estado": "P",
                    "cliente": {
                        "id": "4546221",
                        "nombre": "Johannes",
                        "apellidos": "Kepler",
                        "celular": 3104583224,
                        "direccion": "Cl 3 # 33 - 33",
                        "correoElectronico": "[email protected]",
                        "compras": [
                            {
                                "idCompra": 1,
                                "idCliente": "4546221",
                                "fecha": "1992-08-10T17:30:00",
                                "medioPago": "E",
                                "comentario": "",
                                "estado": "P",
                                "cliente": {
                                    "id": "4546221",
                                    "nombre": "Johannes",
                                    "apellidos": "Kepler",
                                    "celular": 3104583224,
                                    "direccion": "Cl 3 # 33 - 33",
                                    "correoElectronico": "[email protected]",
                                    "compras": [
                                        {
                                            "idCompra": 1,
                                            "idCliente": "4546221",
                                            "fecha": "1992-08-10T17:30:00",
                                            "medioPago": "E",
                                            "comentario": "",
                                            "estado": "P",
                                            "cliente": {
                                                "id": "4546221",
                                                "nombre": "Johannes",
                                                "apellidos": "Kepler",
                                                "celular": 3104583224,
                                                "direccion": "Cl 3 # 33 - 33",
                                                "correoElectronico": "[email protected]",
                                                "compras": [
                                                    {
                                                        "idCompra": 1,
                                                        "idCliente": "4546221",
                                                        "fecha": "1992-08-10T17:30:00",
                                                        "medioPago": "E",
                                                        "comentario": "",
                                                        "estado": "P",
                                                        "cliente": {

me resultan muchos resultados en cascada

Hola a todos al momento de guardar una nueva compra me sale la siguiente excepci贸n:
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of com.platzi.market.domain.Purchase out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of com.platzi.market.domain.Purchase out of START_ARRAY token
at [Source: (PushbackInputStream); line: 1, column: 1]].
ya cheque la clase Purchase del dominio pero no encuentro diferencias con el codigo realizado por el profesor.

Tuve problemas con el save, pero era porque no sabia como meter los datos en Postman, les dejo en Json ojala les sirva
{
鈥渃lienteId鈥: 鈥4546221鈥,
鈥渄ate鈥: 鈥2020-08-10T17:30:00鈥,
鈥減aymentMethod鈥: 鈥淭鈥,
鈥渃omment鈥: 鈥溾,
鈥渟tate鈥: 鈥淧鈥,
鈥渋team鈥: [
{
鈥減roductId鈥: 1,
鈥渜uantity鈥: 10,
鈥渢otal鈥: 3000.0,
鈥渁ctive鈥: true
},
{
鈥減roductId鈥: 24,
鈥渜uantity鈥: 1,
鈥渢otal鈥: 4000.0,
鈥渁ctive鈥: true
},
{
鈥減roductId鈥: 27,
鈥渜uantity鈥: 1,
鈥渢otal鈥: 9000.0,
鈥渁ctive鈥: true
},
{
鈥減roductId鈥: 36,
鈥渜uantity鈥: 1,
鈥渢otal鈥: 40000.0,
鈥渁ctive鈥: true
},
{
鈥減roductId鈥: 49,
鈥渜uantity鈥: 2,
鈥渢otal鈥: 16400.0,
鈥渁ctive鈥: true
}
]
}

Tuve que escribir un constructor de la entidad ComprasProducto porque me arrojaba error 500

  • PurchaseService.java

@Service
public class PurchaseService {

@Autowired
private PurchaseRepository purchaseRepository;

public List<Purchase> getAll() {
    return purchaseRepository.getAll();
}

public Optional<List<Purchase>> getByClientId(String clientId) {
    return purchaseRepository.getByClientId(clientId);
}

public Purchase save(Purchase purchase) {
    return purchaseRepository.save(purchase);
}

}

  • PurchasesController.java

@RestController
@RequestMapping("/purchases")
public class PurchaseController {

@Autowired
private PurchaseService purchaseService;

@GetMapping()
public ResponseEntity<List<Purchase>> getAll() {
    return new ResponseEntity<>(purchaseService.getAll(), HttpStatus.OK);
}

@GetMapping("/client/{id}")
public ResponseEntity<List<Purchase>> getByClientId(@PathVariable("id") String clientId) {
    return purchaseService.getByClientId(clientId)
            .map(purchase -> new ResponseEntity<>(purchase, HttpStatus.OK))
            .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
}

@PostMapping("/save")
public ResponseEntity<Purchase> save(@RequestBody Purchase purchase) {
    return new ResponseEntity<>(purchaseService.save(purchase), HttpStatus.CREATED);
}

}

Alguien M谩s recibi贸 la siguiente Respuesta

El Body enviado es el siguiente鈥

Tengo un error en la Interfaz PurchaseMapper pero no lo encuentro, seg煤n yo es el mismo c贸digo que el profesor.

El error enviado es:
Purchase toPurchase(Compra compra);
^
1 warning

La Interfaz es:

@Mapper(componentModel = 鈥渟pring鈥, uses = {PurchaseItemMapper.class})
public interface PurchaseMapper {

@Mappings({
        @Mapping(source = "idCompra", target = "purchaseId"),
        @Mapping(source = "idCliente", target = "clientId"),
        @Mapping(source = "fecha", target = "date"),
        @Mapping(source = "medioPago", target = "paymentMethod"),
        @Mapping(source = "comentario", target = "comment"),
        @Mapping(source = "estado", target = "state"),
        @Mapping(source = "productos", target = "items"),
})
Purchase toPurchase(Compra compra);
List<Purchase> toPurchases(List<Compra> compras);

@InheritInverseConfiguration
@Mapping(target = "cliente", ignore = true)
Compra toCompra(Purchase purchase);

}

Buenas noches alguien que me pueda ayudar por favor tengo el sgt error segun dice que no puede castear o convertir algo error sql

Tengo el siguiente problema. La aplicaci贸n corre sin problemas pero al ejecutar la petici贸n /purchases/all obtengo un error. Internamente me genera la siguiente traza:

org.postgresql.util.PSQLException: ERROR: column compra0_.id does not exist

No s茅 donde puede estar ubicado.