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


当前回答

使用Lombok时要小心,尤其是@Builder。

解决这个问题的方法是:

   @JsonDeserialize(builder = X.XBuilder.class)
       class X{
          @JsonPOJOBuilder(withPrefix = "")
          public static class XBuilder{

          }
}

我希望它能让你的生活更轻松

其他回答

我有一个类似的问题(使用Jackson, lombok, gradle)和一个没有args构造函数的POJO -解决方案是添加

lombok.anyConstructor.addConstructorProperties=true

去龙目岛。配置文件

如果你使用Unirest作为http库,使用GsonObjectMapper而不是JacksonObjectMapper也可以工作。

<!-- https://mvnrepository.com/artifact/com.konghq/unirest-object-mappers-gson -->
<dependency>
    <groupId>com.konghq</groupId>
    <artifactId>unirest-object-mappers-gson</artifactId>
    <version>2.3.17</version>
</dependency>
Unirest.config().objectMapper = GsonObjectMapper()

如果使用lombok,则可以使用@Jacksonized注释。

您不需要设置器——这个注释使用@Value可以很好地工作。

你不需要@NoArgsConstructor -你可以使用@Builder或@RequiredArgsConstructor。

我加上我的答案,因为我自己,由于我的疏忽,遇到了这个错误。

导入静态对象时不小心引入了错误的序列化器,很长时间都不明白是什么原因。也许这能帮到别人。

// Wrong serializer via static object import
import static org.keycloak.util.JsonSerialization.mapper;

小心些而已。

我用Quarkus, Jackson和Lombok。所以我通过在模型类上添加@Jacksonized属性解决了这个问题。 所以所有的属性是:

@Jacksonized //missing
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ...