我想将原始json数组反序列化为Object。 该对象使用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;
// }
}
}
我得到了这个例外
引起:com.fasterxml.jackson.databind.JsonMappingException:无法构造com.rwest.bitcoinchecker.Pair的实例$ PairBuilder:没有String-argument构造函数/工厂方法从String值反序列化('btcusd')< / p>
答案 0 :(得分:2)
您已经使用lombok注释指定了构建器,您不必自己创建构建器类。
工作示例:。
key
配对课程:
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);
}
}
答案 1 :(得分:0)
我不确定你在哪里尝试这样做,并建议你做错了,但是你的异常说它需要带字符串的构造函数:
@AllArgsConstructor(access = AccessLevel.PRIVATE)
当您设置对“PRIVATE”的访问权限时,它是从所有外部访问者隐藏构造函数,因此从注释“access”参数中删除