hibernate Spring Boot Json crudRepository空POST类型请求

noj0wjuj  于 2022-11-14  发布在  Spring
关注(0)|答案(3)|浏览(176)

我正在使用Spring Boot开发一个rest API项目,在我的POJO类“book”中,我创建了一个要由HibernateMap的表实体:

package com.libreria.proyect.libreria_el_aleph.model;

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

@Id
@Column(name = "ID_libro")
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Integer idLibro;

@Column(name = "ISBN")
private String isbn;

@Column(name = "Nombre_libro")
private String nombreLibro;

@Column(name = "Autor")
private String autor;

@Column(name = "Precio")
private Double precio;

@Column(name = "Cantidad")
private int cantidad;

public Libro(Integer idLibro, String isbn, String nombreLibro, String autor, Double precio, int cantidad ){
    
    this.idLibro = idLibro;
    this.isbn = isbn; 
    this.nombreLibro = nombreLibro;
    this.autor = autor;
    this.precio = precio;
    this.cantidad = cantidad;

}

/**
 * @return Integer return the idLibro
 */
public Integer getIdLibro() {
    return idLibro;
}

/**
 * @param idLibro the idLibro to set
 */
public void setIdLibro(Integer idLibro) {
    this.idLibro = idLibro;
}

/**
 * @return String return the isbn
 */
public String getIsbn() {
    return isbn;
}

/**
 * @param isbn the isbn to set
 */
public void setIsbn(String isbn) {
    this.isbn = isbn;
}

/**
 * @return String return the nombreLibro
 */
public String getNombreLibro() {
    return nombreLibro;
}

/**
 * @param nombreLibro the nombreLibro to set
 */
public void setNombreLibro(String nombreLibro) {
    this.nombreLibro = nombreLibro;
}

/**
 * @return String return the autor
 */
public String getAutor() {
    return autor;
}

/**
 * @param autor the autor to set
 */
public void setAutor(String autor) {
    this.autor = autor;
}

/**
 * @return Double return the precio
 */
public Double getPrecio() {
    return precio;
}

/**
 * @param precio the precio to set
 */
public void setPrecio(Double precio) {
    this.precio = precio;
}

/**
 * @return int return the cantidad
 */
public int getCantidad() {
    return cantidad;
}

/**
 * @param cantidad the cantidad to set
 */
public void setCantidad(int cantidad) {
    this.cantidad = cantidad;
}

}
我试图POST到在我的控制器中实现CrudRepository的Get方法,但是当我发出测试请求时,所有Json元素的内容都是空的,我如何解决这个问题呢?

@RestController
@RequestMapping("Api/libros")
public class LibroController {

    @Autowired
    LibroServices service; <-- Here is my repository crud service

    @GetMapping("/AllBooks")
    public ResponseEntity<ArrayList<Libro>> getAllBooks(){
        ArrayList<Libro> getAllBooks = this.service.listar();
        return ResponseEntity.status(HttpStatus.OK).body(getAllBooks);
    }

    
    @PostMapping("/AllBooks")
    public ResponseEntity<Libro> createNewBook(@RequestBody Libro libro){
        Libro createNewBook = service.saveNewBook(libro); 

        return ResponseEntity.status(HttpStatus.OK).body(createNewBook) ;
    }
}

作为请求,我还添加了我的服务文件的内容:

package com.libreria.proyect.libreria_el_aleph.model.Services;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.libreria.proyect.libreria_el_aleph.model.Libro;
import com.libreria.proyect.libreria_el_aleph.model.
InterfaceServices.ILibroServices;
import 
com.libreria.proyect.libreria_el_aleph.model.Interfaces.ILibro;

@Service
public class LibroServices implements ILibroServices {

@Autowired(required = true)
ILibro repository; 

@Override
public ArrayList<Libro> listar() {
    return (ArrayList<Libro>) repository.findAll();
}

@Override
public Optional<Libro> listarById(Integer idlibro) {
    return Optional.empty();
}

@Override
public Libro saveNewBook(Libro libro) { <-- save method
    return repository.save(libro);
}

@Override
public void delete(Integer idLibro) {
    
}

}

9vw9lbht

9vw9lbht1#

你的保存方法有问题,不管你插入的是什么,我认为它没有保存在数据库中。首先检查数据是否反映在数据库中。

3zwjbxry

3zwjbxry2#

尝试在POJO中添加一个不带id字段的构造函数,如下所示:

public Libro(Integer idLibro, String isbn, String nombreLibro, String autor, Double precio, int cantidad ){
    
    this.idLibro = idLibro;
    this.isbn = isbn; 
    this.nombreLibro = nombreLibro;
    this.autor = autor;
    this.precio = precio;
    this.cantidad = cantidad;

}

此外,发布一个没有ID的对象,因为您已经设置了@GeneratedValue(Strategy=GenerationType.IDENTITY),它将自动生成ID。
此外,不要创建与方法名相同的变量名。尝试将其更改为其他名称,如:

@PostMapping("/AllBooks")
    public ResponseEntity<Libro> createNewBook(@RequestBody Libro libro){
        Libro book = service.saveNewBook(libro); 

    return ResponseEntity<>(book,HttpStatus.CREATED) ;
}
vom3gejh

vom3gejh3#

在这里,您正在从 Postman 那里发送数据列表,并且在您的方法中,您正在接收一个对象,因此,如果您想要保存多个数据,请在控制器中使用这个

@PostMapping("/AllBooks")
public ResponseEntity<Libro> createNewBook(@RequestBody List<Libro> libro){
    Libro createNewBook = service.saveNewBook(libro); 

    return ResponseEntity.status(HttpStatus.OK).body(createNewBook) ;
}

以及在服务使用中:

@Override
public List<Libro> saveAllNewBook(List<Libro> libros) { <-- save method
    return repository.saveAll(libro);
}

相关问题