java - jackson 未能反序列化 OneToMany 对象

标签 java json spring

我遇到了转换器无法处理 JSON 对象的问题。

我在数据库中有两个对象。一对多关系。

我有一个包含许多服务的 AutoService。

然后我正在尝试使用 postman 将 JSON 对象发送到我的服务器 - 我收到一个错误:

WARN org.springframework.http.converter.json.MappingJackson2HttpMessageConverter - Failed to evaluate Jackson deserialization for type [[simple type, class com.webserverconfig.user.entity.AutoService]]: java.lang.IllegalArgumentException: Can not handle managed/back reference 'defaultReference': no back reference property found from type [collection type; class java.util.List, contains [simple type, class com.webserverconfig.user.entity.Service]]

接下来的两个类代表我的模型:

自动服务类:

@Entity
@Table(name = "AutoRate")
public class AutoService {

    public AutoService() {
    }

    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    private long id;

    @Column(name = "serviceName", nullable = false)
    private String serviceName;

    @Column(name = "imageURL", nullable = false)
    private String imageURL;

    @Column(name = "mapCoordinate", nullable = false)
    private String mapCoordinate;

    @Column(name = "websiteURL", nullable = false)
    private String websiteURL;

    @Column(name = "phoneNumber", nullable = false)
    private String phoneNumber;

    @JsonManagedReference
    @OneToMany(fetch = FetchType.EAGER)
    @JoinColumn(name = "autoServiceId")
    private List<Service> services;

    public long getId() {
        return id;
    }

    public String getServiceName() {
        return serviceName;
    }

    public String getImageURL() {
        return imageURL;
    }

    public String getMapCoordinate() {
        return mapCoordinate;
    }

    public String getWebsiteURL() {
        return websiteURL;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public List<Service> getServices() {
        return services;
    }
}

类服务:

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

    public Service() {
    }

    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    @Column(name = "serviceId", unique = true, nullable = false)
    private long serviceId;

    @Column(name = "serviceName", nullable = false)
    private String serviceName;

    @Column(name = "category", nullable = false)
    private String category;

    @Column(name = "price", nullable = false)
    private int price;

    @Column(name = "autoServiceId", nullable = false)
    private long autoServiceId;

    public long getId() {
        return serviceId;
    }

    public String getCategory() {
        return category;
    }


    public int getPrice() {
        return price;
    }

    public String getServiceName() {
        return serviceName;
    }

    public long getAutoServiceId() {
        return autoServiceId;
    }
}

寻求帮助。我错过了一些注释吗?

还有 Controller 类:

@RestController
@RequestMapping("/directory")
public class ServiceController {

    @Autowired
    private AutoRateService dataBaseService;

    @RequestMapping(value = "/get", method = RequestMethod.GET)
    @ResponseBody
    public AutoService getData(){
        AutoService dataList = dataBaseService.getById(1);
        return dataList;
    }

    @RequestMapping(value = "/saveService", method = RequestMethod.POST)
    @ResponseBody public AutoService saveAutoService(@RequestBody AutoService autoService){
        return dataBaseService.save(autoService);
    }
}

最佳答案

您可以将 @JsonBackReference 添加到关系的其他站点。顺便说一句,缺少或未正确实现。添加:

@JsonBackReference
@ManyToOne
@JoinColumn(name = "autoServiceId", nullable = false)
private AutoService autoService;

代替 private long autoServiceId;

还需要调整 AutoService:

@JsonManagedReference
@OneToMany(mappedBy = "autoService", fetch=FetchType.EAGER)
private List<Service> services = new ArrayList<>();

关于java - jackson 未能反序列化 OneToMany 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42612148/

相关文章:

java - 将缓冲图像打印到打印机

jquery - 来自本地 JSON 数据的 Google map 标记

java - 需要教程,关于Spring Web Enterprise开发的非常快速的教程吗?各种示例

java - @Column 不适用于 Java + Hibernate 的子类

java - 尝试安装 JDK8 U11 OSX 10.10 Yosemite 时出错

java - Java中直接使用资源字体

json - 如何编写适用于 MarkLogic 7 和 8 中 JSON API 差异的代码?

c# - 调用 DeserializeObject<Object>( ... ) 时验证 Json 数据

java - 如何从 quartz 调度程序的属性文件中获取值?

spring - 在Spring 3.0.5 jar中找不到SimpleMapScope