通过postman对以下代码进行POST API调用时,出现以下错误。
要求: 根据、和的列表下订单。考虑到订单仅意味着将每个的当前库存减少。<component_id>, and . Consider that an order only implies reducing the current stock of each <component_id> by .
Spring Boot应用程序运行良好,只是在Postman中收到400个错误请求,并在控制台中收到以下请求。
错误日志2023 - 03 - 01T00:43:19.065 + 05:30警告53443---[nio-8090-exec-1]. w.s.m.s.默认处理程序异常解决程序:已解决[org. springframework. http. converter. HttpMessage不可读异常:JSON解析错误:无法从对象值(标记JsonToken.START_OBJECT
)反序列化java.lang.Long
类型的值]
以下是我添加的类的详细信息:
**Controller Class**
@PostMapping("/shop/order")
public ResponseEntity<String> placeOrder(@RequestBody Map<String, Long> orderDetails) {
try {
partService.placeOrder(orderDetails);
return ResponseEntity.ok().body("Order placed successfully!");
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to place order");
}
}
- 存储库类**
public interface PartRepository extends CrudRepository < PartDetails, String > {
@Query("SELECT p FROM PartDetails p WHERE p.carModelId = :carModelId")
List < PartDetails > findByCarModelId(String carModelId);
@Query("SELECT p FROM PartDetails p WHERE p.componentId = :componentId")
List < PartDetails > findByComponentId(String componentId);
**Service Class Logic**
@Transactional
public void placeOrder(Map < String, Long > orderDetails) {
for (Map.Entry < String, Long > entry: orderDetails.entrySet()) {
String componentId = entry.getKey();
Long unitInStock = entry.getValue();
List < PartDetails > partStockOptional = partRepository.findByComponentId(componentId);
// PartDetails partStock = partStockOptional.orElseThrow(() -> new ResourceNotFoundException("Part stock not found with component ID: " + componentId));
PartDetails partStock = (PartDetails) partStockOptional;
Long currentUnits = partStock.getUnitInStock();
if (currentUnits < unitInStock) {
throw new RuntimeException("Insufficient units in stock for component ID: " + componentId);
}
partStock.setUnitInStock(currentUnits - unitInStock);
partRepository.save(partStock);
}
}
**Entity Class**
package com.example.ecombackend.Entity;
import jakarta.persistence.*;
@Entity
@Table
public class PartDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "car_model_id")
private String carModelId;
@Column
private String componentName;
@Column
private String componentId;
@Column(name = "unit_in_stock")
private Long unitInStock;
public PartDetails() {}
public PartDetails(String carModelIds, String componentNames, String componentIds, Long unitInStocks) {
carModelId = carModelIds;
componentName = componentNames;
componentId = componentIds;
unitInStock = unitInStocks;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCarModelId() {
return carModelId;
}
public String getComponentName() {
return componentName;
}
public String getComponentId() {
return componentId;
}
public Long getUnitInStock() {
return unitInStock;
}
public void setCarModelId(String carModelId) {
this.carModelId = carModelId;
}
public void setComponentName(String componentName) {
this.componentName = componentName;
}
public void setComponentId(String componentId) {
this.componentId = componentId;
}
public void setUnitInStock(Long unitInStock) {
this.unitInStock = unitInStock;
}
}
'
1条答案
按热度按时间chhqkbe11#
您在Postman中的身体需要{“EA 1”:5,“BA 1”:3 }不是{“订单详细信息”:{“EA1”:5,“BA1”:3 } }