You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Java的Relationship类实现builder()方法支持JSON序列化

实现步骤

你只需要做对应修改就能符合调用要求:

1. 添加静态builder()方法

在Relationship类的内部(和私有构造方法平级的位置)添加如下静态方法,直接返回Builder实例即可:

public static Builder builder() {
    return new Relationship.Builder();
}

2. 修正现有代码和调用逻辑不匹配的问题

你当前的代码和你期望的调用写法有两处不兼容,需要同步修改:

  • Builder类的属性赋值方法前缀不符合:你调用的是.relationshipType("uses"),但现有方法是setRelationshipType,需要去掉set前缀,同时可以同步修正不规范的字段名relationshipType1避免歧义
  • 你调用了.created(Instant.now()),但现有Relationship类和Builder类都没有created字段,需要补充该字段的定义、构造方法参数和Builder赋值方法
  • 若要Jackson的序列化/反序列化正常工作,需要给@JsonPOJOBuilder添加withPrefix = ""参数,指定Builder的赋值方法没有前缀

修改后的完整代码如下:

import java.time.Instant;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;

@JsonDeserialize(builder = Relationship.Builder.class)
public class Relationship {
    
    private String relationshipType;
    private String description;
    private DomainObject sourceRef;
    private DomainObject targetRef;
    // 补充created字段
    private Instant created;
    
    private Relationship(String relationshipType, String description, DomainObject sourceRef, DomainObject targetRef, Instant created) {
        this.relationshipType = relationshipType;
        this.description = description;
        this.sourceRef = sourceRef;
        this.targetRef = targetRef;
        this.created = created;
    }
    
    // 新增的builder静态方法
    public static Builder builder() {
        return new Builder();
    }
    
    // 修正后的Builder类
    @JsonPOJOBuilder(withPrefix = "") // 指定赋值方法没有前缀
    public static class Builder{
        String relationshipType;
        String description;
        DomainObject sourceRef;
        DomainObject targetRef;
        Instant created;
        
        public Builder relationshipType(String relationshipType) {
            this.relationshipType = relationshipType;
            return this;
        }
        
        public Builder description(String description) {
            this.description = description;
            return this;
        }
        
        public Builder sourceRef(DomainObject sourceRef) {
            this.sourceRef = sourceRef;
            return this;
        }
        
        public Builder targetRef(DomainObject targetRef) {
            this.targetRef = targetRef;
            return this;
        }
        
        // 补充created的赋值方法
        public Builder created(Instant created) {
            this.created = created;
            return this;
        }
        
        public Relationship build() {
            return new Relationship(relationshipType, description, sourceRef, targetRef, created);
        }
    }
}

修改完成后你给出的调用代码就可以正常运行。

内容的提问来源于stack exchange,提问作者AnaGutiFontan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:45:02