我面临** JSON解析错误:无法在Spring Boot项目

我收到 JSON解析错误:当我尝试保存映射到的Pojo类对象时,无法通过Spring Boot项目从START_OBJECT令牌中反序列化java.util.HashSet实例与我的另一位Pojo 一对多关系。我不确定我是否在Postman中发送正确格式的JSON。我试图保存定义了Collection元素集的持久类的值。

家长Pojo课堂:

package com.example.demo.model;

import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "vendor")
public class Vendor {

    @Id
    int vendorId;

    @Column
    String vendorName;

    @OneToMany(fetch = FetchType.LAZY,targetEntity = Customer.class,cascade = CascadeType.ALL)
    @JoinColumn(name = "vendorId")

    Set children;

    public int getVendorId() {
        return vendorId;
    }

    public void setVendorId(int vendorId) {
        this.vendorId = vendorId;
    }

    public String getVendorName() {
        return vendorName;
    }

    public void setVendorName(String vendorName) {
        this.vendorName = vendorName;
    }

    public Set getchildren() {
        return children;
    }

    public void setChildren(Set children) {
        this.children = children;
    }
} 

儿童Pojo课堂:

package com.example.demo.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GeneratorType;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

@Entity
@Table(name = "customer")
public class Customer {

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    int customerId;

    @Column
    String customerName;

    public int getcustomerId() {
        return customerId;
    }

    public void setCustomerId(int customerId) {
        this.customerId = customerId;
    }

    public String getcustomerName() {
        return customerName;
    }

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }

}

控制器:

package com.example.demo.controller;

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

import com.example.demo.model.Vendor;
import com.example.demo.service.VendordataSaveService;

@RestController
public class VendorSaveController {

    @Autowired
    private VendordataSaveService dataSaveService;

    @PostMapping("/save")
    public void saveVendor(@RequestBody Vendor vendor) {
        dataSaveService.saveVendorRecord(vendor);
    }
}

服务类别:

package com.example.demo.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.demo.model.Vendor;
import com.example.demo.repository.VendordataSaveRepository;

@Service
public class VendordataSaveService {

    @Autowired
    private VendordataSaveRepository repository;

    public void saveVendorRecord(Vendor vendor) {
        repository.save(vendor);
    }
}

存储库类:

package com.example.demo.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.example.demo.model.Vendor;

public interface VendordataSaveRepository extends JpaRepository<Vendor,Integer> {

}

我从邮递员发送的JSON格式:

    "vendorId" : 101,"vendorName" : "JAIN BOOKS","children" : {
                    "customerId" : 1,"customerName" : "AMIT"
                 }
}

我在控制台上收到此错误消息:-

  

无法读取HTTP消息:org.springframework.http.converter.HttpMessageNotReadableException:JSON解析错误:无法从START_OBJECT令牌中反序列化java.util.HashSet实例;嵌套异常是com.fasterxml.jackson.databind.exc.MismatchedInputException:无法从START_OBJECT令牌中反序列化java.util.HashSet实例    在[来源:(PushbackInputStream);第4行,第15列](通过参考链:com.example.demo.model.Vendor [“ children”])

我需要改进什么?

lyz2046 回答:我面临** JSON解析错误:无法在Spring Boot项目

实际上,JB Nizet在评论中添加了它。杰克逊(Jackson)告诉您,它正在尝试将JSON反序列化为Setjava.util.HashSet),这是一个集合,但是文件那部分的JSON却是对象START_OBJECT。它不知道如何将对象变成集合,所以它正在放弃。错误位于Vendor["children"]

您的请求包含针对儿童的请求:

"children" : {
    "customerId" : 1,"customerName" : "AMIT"
}

由于children是一个集合,因此如果您想要一个Child,它应该像这样:

"children" : [
    {
        "customerId" : 1,"customerName" : "AMIT"
    }
]

这将是JSON中的对象数组,与您的Set中的Customer非常对应。

本文链接:https://www.f2er.com/3115160.html

大家都在问