【问题标题】:Spring Boot Rest API IssuesSpring Boot Rest API 问题
【发布时间】:2022-11-03 02:44:33
【问题描述】:

我正在尝试使用带有 H2 数据库的 Spring Data Jdbc 实现 Spring Boot Rest API。 这是一个微服务,我正在尝试从 Angular 应用程序向微服务发送 POST 请求。我知道我的 POST 从 Angular 正常工作。在微服务内部,我试图将 POST 请求保存到本地 H2 数据库。 根据我在网上阅读的文档,这应该是相对简单的,但我收到了错误消息。任何帮助将不胜感激。以下是我在 Spring Boot 微服务中设置的文件(标题为“订单”):

订单控制器.java:

package com.clothingfly.order;

import java.util.ListIterator;
import org.springframework.web.client.RestTemplate;
import com.clothingfly.order.Model.Item;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.clothingfly.order.Model.Order;

@RestController
@CrossOrigin(origins = "http://localhost:4200")
public class OrderController {


    @Autowired
    TempOrderRepository orderRepository;

    @PostMapping("/order")
    public Order postOrder(@RequestBody Order order) {
      Order _order = orderRepository.save(new Order(order.getId(), order.getAddress(), order.getPayment(), order.getItems()));
      return _order;
    }
}

TempOrderRepository.java:

package com.clothingfly.order;

import org.springframework.data.jpa.repository.JpaRepository;
import com.clothingfly.order.Model.Order;



public interface TempOrderRepository extends JpaRepository<Order, Long>{

}

订单应用程序.java:

package com.clothingfly.order;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class OrderApplication {

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

}

我有一个名为 Order.java 的模型:

package com.clothingfly.order.Model;


import java.util.List;

import javax.persistence.*;

import org.springframework.data.annotation.Id;

@Entity
@Table(name = "orders")
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(name = "Address")
    private Address address;

    @Column(name = "Payment")
    private PaymentInfo payment;

    @Column(name = "Items")
    private List<Item> items;

    @Column(name = "Error")
    private String error;

    public Order() {

    }

    public Order(long id, Address address, PaymentInfo payment, List<Item> items){
        this.id = id;
        this.address = address;
        this.payment = payment;
        this.items = items;
        this.error = "";
    }

    public long getId() {
        return id;
    }

    public Address getAddress() {
        return address;
    }


    public PaymentInfo getPayment() {
        return payment;
    }


    public List<Item> getItems() {
        return items;
    }

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }

}

Order 模型包含其他三个模型: 项目.java:

package com.clothingfly.order.Model;

import javax.persistence.*;

@Entity
@Table(name = "items")
public class Item {

    @Id
    @GeneratedValue
    @Column(name = "id")
    private long id;

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

    @Column(name = "price")
    private float price;

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

    @Column(name = "quantity")
    private long quantity;

    @Column(name = "inventory")
    private long inventory;

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public float getPrice() {
        return price;
    }

    public long getQuantity() {
        return quantity;
    }

    public long getInventory() {
        return inventory;
    }

    public String getImageUrl(){
        return imageUrl;
    }

    public void setInventory(long inventory) {
        this.inventory = inventory;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    public void setQuantity(long quantity) {
        this.quantity = quantity;
    }

    public Item(long id, String name, float price, long quantity, long inventory, String imageUrl) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.quantity = quantity;
        this.inventory = inventory;
        this.imageUrl = imageUrl;
    }

    public Item() {

  }
}

地址.java:

package com.clothingfly.order.Model;
import javax.persistence.*;
@Entity
@Table(name = "addresses")
public class Address {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

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

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

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

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

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

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

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

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


  public Address() {

  }

  public Address(String firstName, String lastName, String address, String country, String apartmentNo, String state,
            String city, String zipcode) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.address = address;
    this.country = country;
    this.apartmentNo = apartmentNo;
    this.state = state;
    this.city = city;
    this.zipcode = zipcode;
    }

  public String getFirstName() {
    return firstName;
  }

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  public String getLastName() {
    return lastName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public String getAddress() {
    return address;
  }

  public void setAddress(String address) {
    this.address = address;
  }

  public String getCountry() {
    return country;
  }

  public void setCountry(String country) {
    this.country = country;
  }

  public String getApartmentNo() {
    return apartmentNo;
  }

  public void setApartmentNo(String apartmentNo) {
    this.apartmentNo = apartmentNo;
  }

  public String getState() {
    return state;
  }

  public void setState(String state) {
    this.state = state;
  }

  public String getCity() {
    return city;
  }

  public void setCity(String city) {
    this.city = city;
  }

  public String getZipcode() {
    return zipcode;
  }

  public void setZipcode(String zipcode) {
    this.zipcode = zipcode;
  }
}

支付信息.java:

package com.clothingfly.order.Model;

import javax.persistence.*;
@Entity
@Table(name = "payments")
public class PaymentInfo {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

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

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

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

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



  public PaymentInfo(String cardHolder, String cardNumber, String expirationDate, String cvv) {
    this.cardHolder = cardHolder;
    this.cardNumber = cardNumber;
    this.expirationDate = expirationDate;
    this.cvv = cvv;
  }

  public String getCardHolder() {
    return cardHolder;
  }

  public void setCardHolder(String cardHolder) {
    this.cardHolder = cardHolder;
  }

  public String getCardNumber() {
    return cardNumber;
  }

  public void setCardNumber(String cardNumber) {
    this.cardNumber = cardNumber;
  }

  public String getExpirationDate() {
    return expirationDate;
  }

  public void setExpirationDate(String expirationDate) {
    this.expirationDate = expirationDate;
  }

  public String getCvv() {
    return cvv;
  }

  public void setCvv(String cvv) {
    this.cvv = cvv;
  }
}

尝试运行微服务时出现以下错误: Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not determine type for: com.clothingfly.order.Model.Address, at table: orders, for columns: [org.hibernate.mapping.Column(address)]

我将如何解决这个问题? 我希望能够在表格中显示我的所有模型。

我尝试更改地址模型,使其仅返回城市的字符串,但这似乎导致的问题比任何事情都多。

【问题讨论】:

  • 可以分享一下数据库表结构吗?

标签: spring-boot jpa h2


【解决方案1】:

您必须告诉休眠地址对象来自另一个表以及如何连接这些表,因为您的订单表很可能没有包含孔地址的列,但地址的地址 id/主键作为外部地址钥匙。 这是可能的,具体取决于您是否与相应的 @OneToOne、@OneToMany、@ManyToOne 和 @ManyToMany 注释有 1:1、1:n、n:1 或 n:m 关系。 对于您的示例,它可能类似于

@OneToOne
@JoinColumn(name = "address_id", referencedColumnName = "id")
private Address address;

【讨论】:

    猜你喜欢
    • 2016-09-16
    • 2021-03-07
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 2019-03-11
    • 2021-05-22
    相关资源
    最近更新 更多