Builder Pattern 和 Json 别名

问题描述 投票:0回答:1

我想为下面的类构造构建器对象

@Value
@Builder
public static class Input {
    String name;
    Source source;
}

@Value
@Builder
public static class Source {
    //@JsonAlias({"metric", state"})
    //@JsonProperty("state")
    Metric metric ;
}

@Value
@Builder
public static class Metric {
    String ref;
}

我想像这样构造对象

Input.builder()
        .name("state")
        .source(Source.builder()
            .metric(Metric.builder()
                .ref("ref")
                .build())
            .build())
        .build()

同时,在其中一种情况下,'metric'名称将更改为'state',

Input.builder()
        .name("state")
        .source(Source.builder()
            .state(Metric.builder()
                .ref("ref")
                .build())
            .build())
        .build()

构造对象仅在度量/状态名称上有所不同。结构保持不变。我尝试使用@JsonAlias 并没有发现它有帮助。谁能给我正确的参考或当结构相同时如何在构建器模式中使用不同的名称?

java json builder
1个回答
0
投票

你需要在构造函数中告诉lombok你想要的字段名称是什么,并用@Builder注解。看下面的代码和静态类 Metric

import lombok.Builder;
import lombok.Value;

public class Test {

@Value
@Builder
public static class Input {
    String name;
    Source source;
}

@Value
public static class Source {
    Metric metric ;
    
    @Builder
    public Source(Metric state) {
        this.metric = state;
    }
}

@Value
@Builder
public static class Metric {
    String ref;
}

public static void main(String... args) {
    Input.builder()
            .name("state")
            .source(Source.builder()
                    .state(Metric.builder()
                            .ref("ref")
                            .build())
                    .build())
            .build();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.