我正在尝试使用Retrofit和Jackson来反序列化一个API。我得到的onFailure错误没有创造者,像默认构造,存在):不能从对象值反序列化(没有委托或基于属性的创造者。


当前回答

当您使用Lombok builder时,您将得到上述错误。

 @JsonDeserialize(builder = StationResponse.StationResponseBuilder.class)
 public class StationResponse{
   //define required properties 
 }     

 @JsonIgnoreProperties(ignoreUnknown = true)
 @JsonPOJOBuilder(withPrefix = "")
 public static class StationResponseBuilder {}

参考:https://projectlombok.org/features/Builder与杰克逊

其他回答

我在这里搜索这个错误:

No Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator

与Retrofit无关,但如果您正在使用Jackson,则通过向抛出错误的类添加默认构造函数来解决此错误。 更多信息请点击:https://www.baeldung.com/jackson-exception

我可以在@JacksonProperty注释的帮助下在Kotlin中解决这个问题。上述情况的用法示例如下:

import com.fasterxml.jackson.annotation.JsonProperty
...
data class Station(
     @JacksonProperty("repsol_id") val repsol_id: String,
     @JacksonProperty("name") val name: String,
...

我通过添加一个无参数的构造函数解决了这个问题。如果你正在使用Lombok,你只需要添加@NoArgsConstructor注释:

@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
@EqualsAndHashCode
public class User {
    private Long userId;
    private String shortName;
}

我用龙目岛。我得到的错误,因为我没有把@NoArgsConstructor在我的模型类。

如果您在POJO模型上使用Lombok,请确保您有这些注释:

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor

它可以有所不同,但要确保@Getter,特别是@NoArgsConstructor。