gpt4 book ai didi

java - 如何使用带有 lombok Builder 的 jackson 来反序列化 json 数组?

转载 作者:行者123 更新时间:2023-12-01 14:21:28 31 4
gpt4 key购买 nike

我想将一个原始的 json 数组反序列化为一个对象。该对象使用 lombok 的值和构建器注释进行注释。我无法让它工作:

json 看起来像这样:

["btcusd","ltcusd","ltcbtc"]

这是获取一些 json 数组的调用:

public CommandLineRunner run(RestTemplate restTemplate) {
return args -> {
Pair[] pairs = restTemplate
.getForObject("https://api.bitfinex.com/v1/symbols", Pair[].class);
log.info("List[" + Arrays.stream(pairs).map(Pair::getPairId).collect(
Collectors.joining(", ")) + "]");
};
}

这是 Pair.class

@Value
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@JsonDeserialize(builder = Pair.PairBuilder.class)
public class Pair {
@NonNull private String pairId;
private String left;
private String right;

@Builder
private Pair(String pairId) {
this.pairId = pairId;
left = pairId.substring(0, 3).toUpperCase(Locale.US);
right = pairId.substring(3).toUpperCase(Locale.US);
}

@JsonPOJOBuilder(withPrefix = "")
public static final class PairBuilder {
// @JsonCreator
// public PairBuilder pairID(@NonNull String pairId) {
// this.pairId = pairId;
// return this;
// }
}
}

我得到这个异常

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.rwest.bitcoinchecker.Pair$PairBuilder: no String-argument constructor/factory method to deserialize from String value ('btcusd')

最佳答案

你已经用lombok注解指定了构建器,你不必自己创建构建器类。

工作示例:.

import org.springframework.web.client.RestTemplate;

RestTemplate restTemplate = new RestTemplate();
Pair[] pairs = restTemplate
.getForObject("https://api.bitfinex.com/v1/symbols", Pair[].class);

对类:

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NonNull;
import lombok.Value;

import java.util.Locale;

@Value
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class Pair {
@NonNull private String pairId;
private String left;
private String right;

@Builder
private Pair(String pairId) {
this.pairId = pairId;
left = pairId.substring(0, 3).toUpperCase(Locale.US);
right = pairId.substring(3).toUpperCase(Locale.US);
}
}

结果:

Pair(pairId=btcusd, left=BTC, right=USD)
Pair(pairId=ltcusd, left=LTC, right=USD)
Pair(pairId=ltcbtc, left=LTC, right=BTC)
...
...

关于java - 如何使用带有 lombok Builder 的 jackson 来反序列化 json 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48929000/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com