Spring Boot 无法从对象值(标记'JsonToken.START_OBJECT')反序列化类型'java.lang.Long'的值

xytpbqjk  于 2023-03-02  发布在  Spring
关注(0)|答案(1)|浏览(239)

通过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;
        }

    }

'

chhqkbe1

chhqkbe11#

您在Postman中的身体需要{“EA 1”:5,“BA 1”:3 }不是{“订单详细信息”:{“EA1”:5,“BA1”:3 } }

相关问题